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%
帮助的人:4161万
展开全部

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

提交
取消

辅 助

模 式