MFC如何在对话框的图片控件中显示真彩色图像

RT,我在显示真彩色的时候,明显看到颜色数量被压缩,代码以及效果如下,求怎么才能原封不动的显示,色彩不打折扣的那种这是要显示的原图这是显示效果,估计是8位或者16位了,怎... RT,我在显示真彩色的时候,明显看到颜色数量被压缩,代码以及效果如下,求怎么才能原封不动的显示,色彩不打折扣的那种

这是要显示的原图

这是显示效果,估计是8位或者16位了,怎么改正,求救,下面是主要代码(点击“打开”按钮的响应)
void CimageDlg::OnBnClickedOpen()
{
// TODO: 在此添加控件通知处理程序代码
CString lpszPathName;
CRect rect;
CDC* pDC;
CFileDialog fpdlg(TRUE);
if(fpdlg.DoModal()==IDOK)
{
lpszPathName=fpdlg.GetPathName();
}
if(!(lpszPathName==_T("")))
{
m_image.Load(lpszPathName);
}
GetDlgItem(IDC_PICTURE)->GetClientRect(&rect);
pDC=GetDlgItem(IDC_PICTURE)->GetDC();
m_image.StretchBlt(pDC->m_hDC,rect);
}
m_image是一个CImage类对象
展开
 我来答
bhtzu
推荐于2016-10-12 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4162万
展开全部

MFC图片控件的标准方法(在控件属性中指定资源ID)是不能显示真彩图像的,其默认最高支持是256色,也就是8bit位图。

通过编程实现在对话框中显示真彩图像有两种方法:

  1. 不使用图片控件,而是直接在对话框的DC上绘制,如果获取的是对话框的DC并通过静态框等获取区域(也可以指定区域),那么你的其它代码不需要改动。

  2. 使用图片控件。获取图片控件的DC后,因为图片控件默认是256色,其DC中对Stretch拉伸默认是像素损失模式,因此你的图像会失真。这时就要在拉伸显示之前,重新设置图片控件的拉伸损失模式为像素接近模式:

    pDC->SetStretchBltMode(HALFTONE);

    需要注意的是,HALFTONE模式能产生高质量图像,但也是效率最低显示最慢的模式,如果图片较大或者调用频繁,不建议使用。同时,也应注意在设置HALFTONE模式之后,最好调用SetBrushOrgEx函数以避免出现刷子没对准现象。


另外,获取真彩图像句柄(指针)的方法也有很多,可以使用CImage,也可以使用其他GDI+对象,另外也可以使用图片解析代码实现。MFC的图片资源,同样默认是256色,需要特殊的方法才能加载真彩位图。

龍不悔
2013-11-01 · TA获得超过1138个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:496万
展开全部

你这是图像缩放失真的结果,根据我的经验在显示图像前添加一句防止图像失真的语句试试看:

pDC->SetStretchBltMode( HALFTONE ); //防止图像缩放失真
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
归悦欣cf
2013-11-03 · TA获得超过1443个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1312万
展开全部
这样的效果是因为图像在缩小的时候出现失真的,并不是他不是真彩图。使用GDI函数StretchBlt对图像进行缩小或放大,就会有这个问题,你可以试一试一楼的方法,或是使用GDI+,或IPicture接口来显示图片,失真会小很多。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有难同当55
2013-11-02
知道答主
回答量:9
采纳率:0%
帮助的人:1.3万
展开全部
发生的关灯地方第三方失而复得
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式