MFC 怎么把jpg图转换成单色位图 并保存成图片代码实现
时间: 2023-05-31 12:01:43 浏览: 90
打开jpg图像,并且可以存储图像,MFC
3星 · 编辑精心推荐
以下是MFC中将jpg图转换成单色位图并保存成图片的示例代码:
```cpp
// 加载jpg图片
CImage image;
image.Load(_T("example.jpg"));
// 创建单色位图
CBitmap bmp;
bmp.CreateBitmap(image.GetWidth(), image.GetHeight(), 1, 1, NULL);
// 获取位图DC
CDC* pDC = CDC::FromHandle(::GetDC(NULL));
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap* pOldBmp = memDC.SelectObject(&bmp);
// 绘制单色位图
CRect rect(0, 0, image.GetWidth(), image.GetHeight());
CBrush brush(RGB(255, 255, 255)); // 白色
memDC.FillRect(&rect, &brush);
for (int y = 0; y < image.GetHeight(); y++) {
for (int x = 0; x < image.GetWidth(); x++) {
COLORREF color = image.GetPixel(x, y);
BYTE gray = (BYTE)(0.299 * GetRValue(color) + 0.587 * GetGValue(color) + 0.114 * GetBValue(color));
if (gray < 128) {
memDC.SetPixel(x, y, RGB(0, 0, 0)); // 黑色
}
}
}
// 保存单色位图为bmp图片
CImage monoImage;
monoImage.Attach((HBITMAP)bmp.Detach());
monoImage.Save(_T("example_mono.bmp"), Gdiplus::ImageFormatBMP);
// 恢复位图DC
memDC.SelectObject(pOldBmp);
::ReleaseDC(NULL, pDC->GetSafeHdc());
```
上述代码中,使用CImage类加载jpg图片,创建一个单色位图,使用GetPixel方法获取jpg图片中每个像素点的颜色值,将其转换成灰度值,如果灰度值小于128,则将单色位图中对应像素点的颜色设置成黑色,最后保存单色位图为bmp图片。
阅读全文