1. 程式人生 > >CxImage內存方式轉換圖像

CxImage內存方式轉換圖像

ews als 數據 項目 empty details 函數 bsp tracking

最近,處於項目需要,需要將Bmp轉換為JPEG格式。以前做過,采用的是GDI+的方式,該方式有一個極大地缺陷為無法實現跨平臺處理。閑話少說,進入正題。

[cpp] view plain copy
  1. CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);
  2. cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);


該方式很正常,順利將RGB格式24位BMP圖像轉化為本地JPG文件並保存下來。

但是采用以下內存轉換方式,卻失敗了。

[cpp] view plain copy
  1. BYTE* pJpgDataTemp = new BYTE[1024 * 1024];
  2. int lJpgSize = 0;
  3. bool b = cxImageBmp.Encode(pJpgDataTemp, lJpgSize, CXIMAGE_FORMAT_JPG);


一方面,函數返回值為false;另一方面,數據長度,lJpgSize為0。

後來,經過以下修改,成功。

[cpp] view plain copy
  1. BYTE* pJpgDataTemp =NULL;
  2. int lJpgSize = 0;
  3. bool b = cxImageBmp.Encode(pJpgDataTemp,lJpgSize,CXIMAGE_FORMAT_JPG);

為什麽?下面我們從CxImage::Encode()定義中進行查看:

[cpp] view plain copy
  1. bool CxImage::Encode(BYTE * &buffer, long &size, DWORD imagetype)
  2. {
  3. if (buffer!=NULL)
  4. {
  5. strcpy(info.szLastError,"the buffer must be empty");
  6. return false;
  7. }
  8. CxMemFile file;
  9. file.Open();
  10. if(Encode(&file,imagetype))
  11. {
  12. buffer=file.GetBuffer();
  13. size=file.Size();
  14. return true;
  15. }
  16. return false;
  17. }
技術分享


真相大白!

CxImage內存方式轉換圖像