方法1:static Bitmap* FromHBITMAP(HBITMAP hbm, HPALETTE hpal);
方法2:static Bitmap* FromBITMAPINFO( const BITMAPINFO* gdiBitmapInfo, VOID* gdiBitmapData );
方法1 关联的时候好像是copy了一份图像像素数据; Bitmap::LockBits,获取BitmapData,必须是有ImageLockModeUserInputBuf,否则获取的数据有错误;
方法2 关联的时候好像直接关联操作了关联的像素数据;可以直接操作关联时候的像素指针了;
方法3 一般Bitmap bitmap(L"LockBitsTest1.bmp") 关联位图,可直接Bitmap::LockBits,无需ImageLockModeUserInputBuf。
//
GDI+ 获取的像素指针: BYTE* pixels = (BYTE*)bitmapData->Scan0; 排列顺序是 从左到右,从上到下;
(bitmapData->Stride小于0,否则反之;如果ImageLockModeUserInputBuf时,程序员自己设置bitmapData->Stride值(包括bitmapData->Scan0指向的内存空间),不可小于0);
一般读文件方式得到的像素指针 , 排列顺序是 从左到右,从下到上;
//
// ImageLockModeUserInputBuf实例:
BitmapData bitmapData; bitmapData.Stride = 1920 ; bitmapData.Scan0 = new BYTE[w*h*3];
Rect rect(0,0, w, h);
ptempBitmap->LockBits(
&rect, ImageLockModeRead|ImageLockModeWrite |ImageLockModeUserInputBuf,
PixelFormat24bppRGB, &bitmapData);
memcpy(pBuffer, (BYTE*)bitmapData.Scan0, BufferLen);
ptempBitmap->UnlockBits( &bitmapData);
delete bitmapData.Scan0;