CxImage image((BYTE
*
)buffer,size,image_type);
或者
CxMemFile memfile((BYTE * )buffer,size);
CxImage image( & memfile,image_type);
或者
CxMemFile memfile((BYTE * )buffer,size);
CxImage * image = new CxImage();
image -> Decode( & memfile,type);
或者
CxMemFile memfile((BYTE * )buffer,size);
CxImage image( & memfile,image_type);
或者
CxMemFile memfile((BYTE * )buffer,size);
CxImage * image = new CxImage();
image -> Decode( & memfile,type);
如何对内存中的图像编码
long
size
=
0
;
BYTE * buffer = 0 ;
image.Encode(buffer,size,image_type);
...
image.FreeMemory(buffer);
或者
CxMemFile memfile;
memfile.Open();
image.Encode( & memfile,image_type);
BYTE * buffer = memfile.GetBuffer();
long size = memfile.Size();
...
image.FreeMemory(buffer);
BYTE * buffer = 0 ;
image.Encode(buffer,size,image_type);
...
image.FreeMemory(buffer);
或者
CxMemFile memfile;
memfile.Open();
image.Encode( & memfile,image_type);
BYTE * buffer = memfile.GetBuffer();
long size = memfile.Size();
...
image.FreeMemory(buffer);
如何创建一副多页的TIFF
CxImage
*
pimage[
3
];
pimage[ 0 ] =& image1;
pimage[ 1 ] =& image2;
pimage[ 2 ] =& image3;
FILE * hFile;
hFile = fopen( " multipage.tif " , " w+b " );
CxImageTIF multiimage;
multiimage.Encode(hFile,pimage, 3 );
fclose(hFile);
或者
FILE * hFile;
hFile = fopen( " c:\\multi.tif " , " w+b " );
CxImageTIF image;
image.Load( " c:\\1.tif " ,CXIMAGE_FORMAT_TIF);
image.Encode(hFile, true );
image.Load( " c:\\2.bmp " ,CXIMAGE_FORMAT_BMP);
image.Encode(hFile, true );
image.Load( " c:\\3.png " ,CXIMAGE_FORMAT_PNG);
image.Encode(hFile);
fclose(hFile);
pimage[ 0 ] =& image1;
pimage[ 1 ] =& image2;
pimage[ 2 ] =& image3;
FILE * hFile;
hFile = fopen( " multipage.tif " , " w+b " );
CxImageTIF multiimage;
multiimage.Encode(hFile,pimage, 3 );
fclose(hFile);
或者
FILE * hFile;
hFile = fopen( " c:\\multi.tif " , " w+b " );
CxImageTIF image;
image.Load( " c:\\1.tif " ,CXIMAGE_FORMAT_TIF);
image.Encode(hFile, true );
image.Load( " c:\\2.bmp " ,CXIMAGE_FORMAT_BMP);
image.Encode(hFile, true );
image.Load( " c:\\3.png " ,CXIMAGE_FORMAT_PNG);
image.Encode(hFile);
fclose(hFile);
如何复制和粘贴图像
//
复制(copy)
HANDLE hDIB = image -> CopyToHandle();
if (::OpenClipboard(AfxGetApp() -> m_pMainWnd -> GetSafeHwnd())) {
if (::EmptyClipboard()) {
if (::SetClipboardData(CF_DIB,hDIB) == NULL ) {
AfxMessageBox( " Unable to set Clipboard data " );
} } }
CloseClipboard();
// 粘贴(paste)
HANDLE hBitmap = NULL;
CxImage * newima = new CxImage();
if (OpenClipboard()) hBitmap = GetClipboardData(CF_DIB);
if (hBitmap) newima -> CreateFromHANDLE(hBitmap);
CloseClipboard();
HANDLE hDIB = image -> CopyToHandle();
if (::OpenClipboard(AfxGetApp() -> m_pMainWnd -> GetSafeHwnd())) {
if (::EmptyClipboard()) {
if (::SetClipboardData(CF_DIB,hDIB) == NULL ) {
AfxMessageBox( " Unable to set Clipboard data " );
} } }
CloseClipboard();
// 粘贴(paste)
HANDLE hBitmap = NULL;
CxImage * newima = new CxImage();
if (OpenClipboard()) hBitmap = GetClipboardData(CF_DIB);
if (hBitmap) newima -> CreateFromHANDLE(hBitmap);
CloseClipboard();
如何在图片框控件(Picture Box)中显示图像
HBITMAP m_bitmap
=
NULL;
CxImage image( " myfile.png " , CXIMAGE_FORMAT_PNG);
...
CDC * hdc = m_picture.GetDC();
HBITMAP m_bitmap = image.MakeBitmap(hdc -> m_hDC);
HBITMAP hOldBmp = m_picture.SetBitmap(m_bitmap);
if (hOldBmp) DeleteObject(hOldBmp);
if (hdc -> m_hDC) m_picture.ReleaseDC(hdc);
...
if (m_bitmap) DeleteObject(m_bitmap);
CxImage image( " myfile.png " , CXIMAGE_FORMAT_PNG);
...
CDC * hdc = m_picture.GetDC();
HBITMAP m_bitmap = image.MakeBitmap(hdc -> m_hDC);
HBITMAP hOldBmp = m_picture.SetBitmap(m_bitmap);
if (hOldBmp) DeleteObject(hOldBmp);
if (hdc -> m_hDC) m_picture.ReleaseDC(hdc);
...
if (m_bitmap) DeleteObject(m_bitmap);
译后序:
关于图像处理库,我相信大家有一个共同的疑问:这么多图像处理库,我该如何选择?在CSDN的blog中有这样一段文字,比较透彻地回答了这个问题,感谢作者的透彻解释:
"CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage, PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所束缚。
在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。"