MFC 24位图转换成单色位图代码
时间: 2023-05-29 11:06:35 浏览: 205
下面是MFC中将24位图转换成单色位图的代码:
- 首先需要用CImage类加载24位图像:
CImage img; img.Load(_T("your24bitimage.bmp"));
- 然后创建一个单色位图:
CBitmap bmp; bmp.CreateBitmap(img.GetWidth(), img.GetHeight(), 1, 1, NULL);
- 创建一个内存DC并将单色位图选入:
CDC dcMem; dcMem.CreateCompatibleDC(NULL); CBitmap* pOldBmp = dcMem.SelectObject(&bmp);
- 将24位图像绘制到内存DC上:
img.Draw(dcMem.GetSafeHdc(), 0, 0);
- 创建一个位图信息结构体BITMAP,用于获取单色位图的信息:
BITMAP bm; bmp.GetBitmap(&bm);
- 创建一个缓存区用于存储单色位图数据:
BYTE* pBits = new BYTE[bm.bmWidthBytes * bm.bmHeight];
- 获取单色位图数据:
GetBitmapBits(bmp, bm.bmWidthBytes * bm.bmHeight, pBits);
- 将单色位图数据重新存储到缓存区中:
for (int i = 0; i < bm.bmWidthBytes * bm.bmHeight; i++) { pBits[i] = (pBits[i] > 128) ? 0 : 255; }
- 将修改后的单色位图数据重新设置到单色位图中:
SetBitmapBits(bmp, bm.bmWidthBytes * bm.bmHeight, pBits);
- 清空内存:
delete[] pBits;
- 将单色位图绘制到屏幕上:
CClientDC dc(this); dc.BitBlt(0, 0, img.GetWidth(), img.GetHeight(), &dcMem, 0, 0, SRCCOPY);
- 恢复原始位图:
dcMem.SelectObject(pOldBmp);
阅读全文
相关推荐

















