为什么用StretchDIBits 和SetDIBitsToDevice绘图的清晰度不同?

a198997 2014-08-06 10:22:22
我用 SetDIBitsToDevice(hDC,0,0,m_Width,m_Height,0,0,0,m_Height,&Q2_Q4[0],BitMapInfo,DIB_RGB_COLORS);
绘的图非常清晰。

可是用StretchDIBits(hDC, 0, 0, p_width, p_height, 0, 0, m_Width, m_Height, &Q2_Q4[0], BitMapInfo, DIB_RGB_COLORS, SRCCOPY);
这个函数后就变得很不清晰了。求大神指导。
...全文
1433 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
月光格外亮 2017-01-13
  • 打赏
  • 举报
回复 1
使用之前先调用 SetStretchBltMode(dc.m_hDC,COLORONCOLOR)函数
阿呆_ 2014-08-08
  • 打赏
  • 举报
回复
a198997 2014-08-08
  • 打赏
  • 举报
回复
引用 15 楼 Idle_ 的回复:
算法很简单啊,计算源和目标的比例,比如源:目标=3.5:1,那就是源图3.5个点合成目标1个点,那么读取源图4个点,分别取出各自r,g,b颜色(第四个点取出的r,g,b取一半),相加后分别取平均值,就是目标图第一个点的r,g,b颜色, 再读取源图后面3个点,加上第一次读取时第4点剩下的一半r,g,b颜色相加平均,就是目标第二个点的颜色。按这种方法先生成行(x轴缩放),生成的结果图再计算列(y轴缩放),最后生成平滑目标图
RGB存在这个内存中。源图宽为m_Width 高为m_Height. 目标的宽为p_Width 高为p_Height Q4_Q2[(Dlg->m_Height - y -1)*Dlg->m_Width*3 + (x*3) + 0] =(BYTE)B; Q4_Q2[(Dlg>m_Height - y -1)*Dlg->m_Width*3 + (x*3) + 1] =(BYTE)G; Q4_Q2[(Dlg->m_Height - y -1)*Dlg->m_Width*3 + (x*3) + 2] =(BYTE)R; 想用StretchDIBits(hDC, 0, 0, p_width, p_height, 0, 0, m_Width, m_Height, &Q2_Q4[0], BitMapInfo, DIB_RGB_COLORS, SRCCOPY);绘图。 求具体代码。急要的。可以加分哈。。。
baichi4141 2014-08-07
  • 打赏
  • 举报
回复
StretchDIBits在缩小图片时没有做像素合并,而是直接取某个像素的值,从而导致图片上两个像素之间变得不连续 我当初是自己写了个简单的合并算法,估计这种东西在网上一抓一大把
赵4老师 2014-08-07
  • 打赏
  • 举报
回复
引用 11 楼 a198997 的回复:
[quote=引用 10 楼 wangyaninglm 的回复:] 你这个就是拉伸了把
现在是放大没有问题,但是一旦缩小图片就不行了。。。。 [/quote] 调用GDI+或CxImage或Image Magick或PhotoShop的图片放大缩小函数。
a198997 2014-08-07
  • 打赏
  • 举报
回复
引用 10 楼 wangyaninglm 的回复:
你这个就是拉伸了把
现在是放大没有问题,但是一旦缩小图片就不行了。。。。
阿呆_ 2014-08-07
  • 打赏
  • 举报
回复
算法很简单啊,计算源和目标的比例,比如源:目标=3.5:1,那就是源图3.5个点合成目标1个点,那么读取源图4个点,分别取出各自r,g,b颜色(第四个点取出的r,g,b取一半),相加后分别取平均值,就是目标图第一个点的r,g,b颜色, 再读取源图后面3个点,加上第一次读取时第4点剩下的一半r,g,b颜色相加平均,就是目标第二个点的颜色。按这种方法先生成行(x轴缩放),生成的结果图再计算列(y轴缩放),最后生成平滑目标图
a198997 2014-08-07
  • 打赏
  • 举报
回复
引用 13 楼 baichi4141 的回复:
StretchDIBits在缩小图片时没有做像素合并,而是直接取某个像素的值,从而导致图片上两个像素之间变得不连续 我当初是自己写了个简单的合并算法,估计这种东西在网上一抓一大把
求具体算法。。。急要啊。。。。
a198997 2014-08-06
  • 打赏
  • 举报
回复
写错了,第一个为StretchDIBits(hDC, 0, 0, p_width, p_height, 0, 0, m_Width, m_Height, &Q2_Q4[0], BitMapInfo, DIB_RGB_COLORS, SRCCOPY); 的 第二个是 SetDIBitsToDevice(hDC,0,0,m_Width,m_Height,0,0,0,m_Height,&Q2_Q4[0],BitMapInfo,DIB_RGB_COLORS);
a198997 2014-08-06
  • 打赏
  • 举报
回复

第一个为SetDIBitsToDevice的图像
第二个为StretchDIBits的图像。差距特别大啊。求指导为什么啊
shiter 2014-08-06
  • 打赏
  • 举报
回复
你这个就是拉伸了把
a198997 2014-08-06
  • 打赏
  • 举报
回复
现在调试的结果是,一旦用strechdibits把原来图像缩小就不行了。请问怎么办
a198997 2014-08-06
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
4楼一针见血。
可是我用strechdibits后图片大小适应了,但是显示出来的图片很不清楚啊
a198997 2014-08-06
  • 打赏
  • 举报
回复
引用 3 楼 zzz3265 的回复:
第二张图片看不见 第一张也感觉有失真
第二张图是显示正常的。第一张用strechdibits后就出现问题了。
赵4老师 2014-08-06
  • 打赏
  • 举报
回复
4楼一针见血。
a198997 2014-08-06
  • 打赏
  • 举报
回复
引用 4 楼 Idle_ 的回复:
strechdibits会自动拉伸图片以适应你给出的目标rect大小. setdibtstodevice只会原样显示图片,超出rect范围会被切割,但是不足rect大小的图片不会扩大
可是我用setdibtstodevice图片显示正常。用strechdibits后图片显示很不清楚啊。上面有2副截图,很明显的。求帮忙啊
阿呆_ 2014-08-06
  • 打赏
  • 举报
回复
strechdibits会自动拉伸图片以适应你给出的目标rect大小. setdibtstodevice只会原样显示图片,超出rect范围会被切割,但是不足rect大小的图片不会扩大
Yofoo 2014-08-06
  • 打赏
  • 举报
回复
第二张图片看不见 第一张也感觉有失真

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧