移植CxImage到Sigma 865x WinCE平台上

來源:互聯網
上載者:User

最近給一個客戶在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動畫,需要花很長時間。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.