MFC图片控件的标准方法(在控件属性中指定资源ID)是不能显示真彩图像的,其默认最高支持是256色,也就是8bit位图。
通过编程实现在对话框中显示真彩图像有两种方法:
不使用图片控件,而是直接在对话框的DC上绘制,如果获取的是对话框的DC并通过静态框等获取区域(也可以指定区域),那么你的其它代码不需要改动。
使用图片控件。获取图片控件的DC后,因为图片控件默认是256色,其DC中对Stretch拉伸默认是像素损失模式,因此你的图像会失真。这时就要在拉伸显示之前,重新设置图片控件的拉伸损失模式为像素接近模式:
pDC->SetStretchBltMode(HALFTONE);
需要注意的是,HALFTONE模式能产生高质量图像,但也是效率最低显示最慢的模式,如果图片较大或者调用频繁,不建议使用。同时,也应注意在设置HALFTONE模式之后,最好调用SetBrushOrgEx函数以避免出现刷子没对准现象。
另外,获取真彩图像句柄(指针)的方法也有很多,可以使用CImage,也可以使用其他GDI+对象,另外也可以使用图片解析代码实现。MFC的图片资源,同样默认是256色,需要特殊的方法才能加载真彩位图。
你这是图像缩放失真的结果,根据我的经验在显示图像前添加一句防止图像失真的语句试试看:
pDC->SetStretchBltMode( HALFTONE ); //防止图像缩放失真
这样的效果是因为图像在缩小的时候出现失真的,并不是他不是真彩图。使用GDI函数StretchBlt对图像进行缩小或放大,就会有这个问题,你可以试一试一楼的方法,或是使用GDI+,或IPicture接口来显示图片,失真会小很多。
发生的关灯地方第三方失而复得