MFC CImage 奇怪的工件

And*_*hto 2 c++ mfc stretchblt cimage

我正在使用 MFCCDC尝试创建输出,目前正在尝试渲染一些图像。

在我的示例中,我希望输出约为300x300像素,但原始图片是2360x1884. 当将此图像加载到 aCImage并使用CRectbeing绘制它时300x300,结果真的很疯狂......

这是原始图像:

原图

绘制图像:

印刷图像

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

示例代码:

  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);
Run Code Online (Sandbox Code Playgroud)

use*_*902 5

默认情况下,该Draw方法将使用拉伸 Blt 模式,BLACKONWHITE如果图像大小相同,则该模式很好,但它会导致您在缩小图像时看到的颜色伪影,如下图所示:

在此输入图像描述

通过将 Stretch Blt Mode 设置为HALFTONE,就可以观察到正确的颜色行为,所需要做的就是SetStretchBltMode在使用之前添加对 的调用Draw

SetStretchBltMode(hdc, HALFTONE);
image.Draw(hdc, boundries);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述