CxImage內存方式轉換圖像
阿新 • • 發佈:2017-05-31
ews als 數據 項目 empty details 函數 bsp tracking
[cpp] view plain copy
最近,處於項目需要,需要將Bmp轉換為JPEG格式。以前做過,采用的是GDI+的方式,該方式有一個極大地缺陷為無法實現跨平臺處理。閑話少說,進入正題。
[cpp] view plain copy- CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);
- cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);
該方式很正常,順利將RGB格式24位BMP圖像轉化為本地JPG文件並保存下來。
但是采用以下內存轉換方式,卻失敗了。
- BYTE* pJpgDataTemp = new BYTE[1024 * 1024];
- int lJpgSize = 0;
- bool b = cxImageBmp.Encode(pJpgDataTemp, lJpgSize, CXIMAGE_FORMAT_JPG);
一方面,函數返回值為false;另一方面,數據長度,lJpgSize為0。
後來,經過以下修改,成功。
[cpp] view plain copy- BYTE* pJpgDataTemp =NULL;
- int lJpgSize = 0;
- bool b = cxImageBmp.Encode(pJpgDataTemp,lJpgSize,CXIMAGE_FORMAT_JPG);
為什麽?下面我們從CxImage::Encode()定義中進行查看:
[cpp] view plain copy- bool CxImage::Encode(BYTE * &buffer, long &size, DWORD imagetype)
- {
- if (buffer!=NULL)
- {
- strcpy(info.szLastError,"the buffer must be empty");
- return false;
- }
- CxMemFile file;
- file.Open();
- if(Encode(&file,imagetype))
- {
- buffer=file.GetBuffer();
- size=file.Size();
- return true;
- }
- return false;
- }
真相大白!
CxImage內存方式轉換圖像