其实是件很简单的事情,结果搞了一个下午,原因就是一个小小的细节,唉,总是败在这上面。。。
首先,从CBitmap中提取像素数据赋值给BYTE类型,代码如下:
CBitmap Bmp;//背景图片
Bmp.LoadBitmap(IDB_BITMAP1);//从资源中载入BMP位图
Bmp.GetBitmap(&bm); //获得位图大小结构
long sizeByte = bm.bmHeight * bm.bmWidth * 4; //计算像素数据大小,因为是32位图,所以*4,如果是24位,则*3
BYTE *pBmpBuffer = new BYTE[sizeByte];
memset(pBmpBuffer, 0, sizeByte);//初始化内存指针
Bmp.GetBitmapBits(sizeByte, pBmpBuffer);//复制像素数据
然后是BYTE转换为CBitmap,代码如下:
CBitmap bkBmp;
CDC *pDC = GetDC();
long sizeByte = bkHeight * bkWidth * 4;
bkBmp.CreateCompatibleBitmap(pDC,bkWidth,bkHeight);//初始化图形,否则没有文件头
bkBmp.SetBitmapBits(sizeByte,pImg);//复制像素数据
我在初始化图像那里卡了好久。。。因为自己定义的CBitmap变量是一个CBitmap类型指针,然后我就
bkBmp->CreateCompatibleBitmap(pDC,bkWidth,bkHe