移植CxImage到Sigma 865x WinCE平台上

最近给一个客户在Sigma 865x高清平台上定制了WinCE6.0。客户需要一个图片浏览软件。因为该款CPU是MIPS的内核,共享的现成软件很少。所以决定移植或者做一个给客户。

CxImage是一个开源图片处理库,而且提供了Pocket PC2003的一个可以运行的demo。于是决定先移植,如果移植的性能不能满足需求,再考虑用CE下提供的COM写一个。

虽然该demo可以在Pocket PC2003上运行,但要在WinCE下运行,需要修改几个bugs:

 

1. 类作为参数时,一般传递类的引用,不使用类的指针作为参数。

 

bool CxImage::Decode(FILE *hFile, DWORD imagetype)
{
    CxIOFile file(hFile);
    return Decode(&file,imagetype);
}

 

修改为:

bool CxImage::Decode(FILE *hFile, DWORD imagetype)
{
    CxIOFile file(hFile);
    //return Decode(&file,imagetype);
    return Decode(file,imagetype);
}

虽然红色代码在Pocket PC2003上运行正常,但在WinCE6.0下会有异常。当然需要重载

一个Decode方法。

 

2. GIF动画不能播放:

在完成了JPG,BMP,PNG以及TIF图片的显示后,移植GIF后,发现GIF动画不仅不能播放,

而且只要做打开GIF动画的操作,CxImage会报堆栈空间不够,退出。

 

将堆栈Reserve Size与Commit size调整为如下图所示大小后,GIF动画可以播放了。


3. GIF播放时,打开另外的图片时,CxImage报异常然后退出。

 

这是因为GIF动画播放是用一个单独的线程实现的。当GIF正在播放时打开另外的图片文件,由于只是通知播放线程需要终止但却没有

等待播放线程终止释放资源。增加一个播放线程与主线程同步的信号。当主线程通知播放线程需要终止时,主线程等待播放线程的终止

信号。收到播放终止信号后,再开始另外的任务。

 

除了以上修改外,为了满足浏览,还做了一些新的窗口变化方面的处理。例如任何图片可以适中显示(不扭曲,不变形),也可以放大

缩小原图显示等等。

 

4. 内存泄露:

移植完GIF后,做一些基本的测试,发现有内存泄露问题,而且很严重。当打开GIF正在显示时,打开另外的图片。

有时图片不能显示,报内存不足;只有一些小的图片可以打开。察看系统的内存使用情况,发现内存几乎被使用完。

修改了内存泄露问题后,算是初步移植完成了。

 

虽然CxImage可以在Sigma 上跑起来,但是由于CxImage需要的内存很多,而且效率比较低,打开1920x1440的图片或者清晰度高

的GIF动画,需要花很长时间。

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值