如何制作单色位图

环境

1、系统:windows

2、软件:画图

步骤

首先打开windows自带的画图工具,画一个图案(随意发挥);

单击左上角菜单栏"文件"→“另存为”→“BMP图片(B)”选项;

打开选择的图片保存路径,BMP默认保存类型是24位位图;

 下拉框选择想要的单色位位图 ,点击“保存”即可。

以下是使用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
发出的红包

打赏作者

林中云雾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值