彩色位图与单色位图

初始化位图时有一下两种选择 1.单色位图  2.彩色位图   虽然现视出来都是黑色但是 两者大大有区别
Bitmap.CreateBitmap(x,y,1,1,null);//单色

Bitmap.CreateCompatibleBitmap(pDC,x,y);//彩色

把不同位图选入dc时,dc会有不同的效果。当选入单色位图时,dc会被初始化为单色的,选入彩色位图时,dc会被初始化为彩色的,单色dc只能显示两种颜色(黑白),彩色dc那就能显示彩色图像,

当把彩色位图选入单色dc时,彩色位图的背景色会变为白色,前景色会变为黑色

利用这种效果,可以把彩色位图的背景色变为白的色

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用MFC代码将24位图转换为单色位图的示例: ``` // 定义24位图单色位图位图信息头 BITMAPINFOHEADER biSrc, biDst; // 读取24位图像素数据 BYTE* pSrcBits = (BYTE*)pSrcDib->GetBits(); // 计算24位图每个像素占用的字节数 int nSrcPitch = ((pSrcDib->GetWidth() * 24 + 31) & ~31) >> 3; // 计算单色位图每个像素占用的字节数 int nDstPitch = ((pSrcDib->GetWidth() + 31) & ~31) >> 3; // 分配单色位图像素数据空间 BYTE* pDstBits = new BYTE[nDstPitch * pSrcDib->GetHeight()]; // 将24位图转换为单色位图 for (int y = 0; y < pSrcDib->GetHeight(); y++) { for (int x = 0; x < pSrcDib->GetWidth(); x++) { // 获取24位图像素点的RGB值 BYTE r = pSrcBits[y * nSrcPitch + x * 3 + 2]; BYTE g = pSrcBits[y * nSrcPitch + x * 3 + 1]; BYTE b = pSrcBits[y * nSrcPitch + x * 3]; // 计算单色位图像素点的灰度值 BYTE gray = (BYTE)((r * 30 + g * 59 + b * 11) / 100); // 设置单色位图像素点的值 if (gray > 128) { pDstBits[y * nDstPitch + x / 8] &= ~(1 << (7 - x % 8)); } else { pDstBits[y * nDstPitch + x / 8] |= (1 << (7 - x % 8)); } } } // 设置24位图单色位图位图信息头 biSrc.biSize = sizeof(BITMAPINFOHEADER); biSrc.biWidth = pSrcDib->GetWidth(); biSrc.biHeight = pSrcDib->GetHeight(); biSrc.biPlanes = 1; biSrc.biBitCount = 24; biSrc.biCompression = BI_RGB; biSrc.biSizeImage = nSrcPitch * pSrcDib->GetHeight(); biSrc.biXPelsPerMeter = 0; biSrc.biYPelsPerMeter = 0; biSrc.biClrUsed = 0; biSrc.biClrImportant = 0; biDst.biSize = sizeof(BITMAPINFOHEADER); biDst.biWidth = pSrcDib->GetWidth(); biDst.biHeight = pSrcDib->GetHeight(); biDst.biPlanes = 1; biDst.biBitCount = 1; biDst.biCompression = BI_RGB; biDst.biSizeImage = nDstPitch * pSrcDib->GetHeight(); biDst.biXPelsPerMeter = 0; biDst.biYPelsPerMeter = 0; biDst.biClrUsed = 0; biDst.biClrImportant = 0; // 创建单色位图DIB对象 CDib* pDstDib = new CDib(); pDstDib->CreateDib(&biDst, pDstBits); // 释放单色位图像素数据空间 delete[] pDstBits; ``` 该代码首先读取24位图像素数据,并计算出24位图单色位图每个像素占用的字节数。然后,使用双重循环遍历24位图的每个像素点,获取其RGB值,并计算出其灰度值。最后,根据灰度值设置单色位图像素点的值。最后,使用新的位图信息头和单色位图像素数据创建单色位图DIB对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值