MFC CImage 怪异神器

问题描述 投票:0回答:1

我正在使用 MFC CDC 尝试创建输出,目前正在尝试渲染一些图像。 在我的示例中,我希望输出约为 300x300 像素,但原始图片为 2360x1884。当将此图像加载到 CImage 并使用 300x300 的 CRect 进行绘制时,结果真的很疯狂......

这是原图:

绘制图像:

如何正确绘制原始图像较大的图像?

示例代码:

  CImage image;
  CDC* painter;
  CString filepath = "puppy.jpg";
  image.Load(filepath);
  CRect boundries(x, y, x + 300, y + 300);
  HDC hdc = *painter;
  image.Draw(hdc, boundries);
c++ mfc cimage
1个回答
0
投票

默认情况下,Draw 方法将使用拉伸 Blt 模式

BLACKONWHITE
,如果图像大小相同,这很好,但是它会导致缩小图像时看到的颜色伪影,如下图所示:

通过将 Stretch Blt 模式设置为

HALFTONE
,就可以观察到正确的颜色行为,所需要做的就是在使用
SetStretchBltMode
之前添加对
Draw
的调用:

SetStretchBltMode(hdc, HALFTONE);
image.Draw(hdc, boundries);

© www.soinside.com 2019 - 2024. All rights reserved.