vc中位图伸缩函数StretchBlt在对图片进行缩放时会造成严重的图片失真。在了解解决方法前先巩固下StretchBlt的用法:

StretchBlt

函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。

函数原型:BOOL StretchBlt(HDC hdc, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop); 
参数: 
hdcDest:指向目标设备环境的句柄。 
nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。 
nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。 
nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。 
nHeightDest:指定目标矩形的高度,按逻辑单位表示高度。 
hdcSrc:指向源设备环境的句柄。 
nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。 
nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。 
nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。 
nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。 
dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。参考BitBlt可了解常用的光栅操作码列表。 
返回值:如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。Windows NT:若想获得更多的错误信息,请调用GetLastError函数。
但是,StretchBlt函数缩放图片后图片失真严重,所以要用SetStretchBltMode函数来设置 StretchBlt(或StretchDIBits)函数的伸缩模式。具体用法是
调用StretchBlt前调用:
SetStretchBltMode(pDC->m_hDC,STRETCH_HALFTONE);

用StretchBlt,图像缩放是,失真很严重

有人说用pScreenDC->SetStretchBltMode(COLORONCOLOR),结果失真更严重了

发现pDC->SetStretchBltMode(HALFTONE);效果最佳

(其实都差不多)

深层了解:

函数原型:int SetSTretchBltMode(HDC hdc, int iStretchMode)

参数: 
hdc:设备环境句柄。 
LStretchMode:指定拉伸模式。它可以取下列值,这些值的含义如下: 
BLACKONWHITE:使用消除和现在的像素颜色值进行逻辑AND(与)操作运算。如果该位图是单色位图,那么该模式以牺牲白色像素为代价,保留黑色像素点。 
COLORONCOLOR:删除像素。该模式删除所有消除的像素行,不保留其信息。 
HALFTONE:将源矩形区中的像素映射到目标矩形区的像素块中,覆盖目标像素块的一般颜色与源像素的颜色接近。在设置完HALFTONE拉伸模之后,应用程序必须调用SetBrushOrgEx函数来设置刷子的起始点。如果没有成功,那么会出现刷子没对准的情况。 
STRETCH_ANDSCANS:与BLACKONWHITE一样。 
STRETCH_DELETESCANS:与COLORONCOLOR一样。 
STRECH_HALFTONE:与HALFTONE相同。 
STRETCH_ORSCANS:与WHITEONBLACK相同。 
WHITEONBLACK:使用颜色值进行逻辑OR(或)操作,如果该位图为单色位图,那么该模式以牺牲黑色像素为代价,保留白色像素点。 
返回值:如果函数执行成功,那么返回值就是先前的拉伸模式,如果函数执行失败,那么返回值为0。 
Windows NT:若想获得更多错误信息,请调用GetLastError函数。 
备注:拉伸模式在应用程序调用StretchBit函数时定义系统如何将位图的行或列与显示设备上的现有像素点进行组合。 
BLACKONWHITE(STRETCH_ANDSCANS)和WHITEONBLACK(STRETCH_ORSCANS)模式典型地用来保留单色位图中的前景像素。COLORONCOLOR(STRETCH_DELETESCANS)模式则典型地用于保留彩色位图中的颜色。 
HALFTONE模式比其他三种模式需要对源图像进行更多的处理,也比其他模式慢,但它能产生高质量图像,也应注意在设置HALFTONE模式之后,应调用SetBrushOrgEx函数以避免出现刷子没对准现象。 
根据设备驱动程序的功能不同,其他一些拉伸模式也可能有效

对比一下:

转载于:https://www.cnblogs.com/huty/p/8517098.html

【VS开发】MFC学习之 解决StretchBlt()图片缩放绘图失真相关推荐

  1. 暑期学习日记35:图片缩放动画

    今天学习了使用html+css实现图片缩放动画,将鼠标移动到图片上会使图片放大. 代码如下: <!doctype html> <html> <head> <m ...

  2. 谷歌浏览器下图片缩放模糊失真

    css中给图片添加此属性: backface-visibility:hidden; -webkit-backface-visibility:hidden; /* Chrome 和 Safari */ ...

  3. python图片缩放不失真

    废话少说,直接上代码,行不行试了就知道 import osfrom PIL import Imagedef letterbox_image(image, size):iw, ih = image.si ...

  4. 图片缩放情况下失真问题处理

    图片缩放会失真是真理,在浏览器里也一样,貌似使用传说中的双三次插值可以让失真看起来比较不明显,但是真的想不通IE7已经实现了,却不默认打开,是体谅我们的CPU还是内存呢? 简单来说,我们在图片的CSS ...

  5. 微信小程序图片无法存入云开发数据库,求解决

    微信小程序图片无法存入云开发数据库,求解决 上传图片的js代码片段 上传图片的js代码片段 上传图片的js代码片段,觉得自己代码的没错,也能打印出来上传的图片地址,但是发现并没有存进数据库,求大神指点 ...

  6. 大疆无人机安卓Mobile Sdk开发(五)解决M300Rtk H20相机无法获取图片视频的问题

    大疆无人机安卓Mobile Sdk开发(一)简单介绍 大疆无人机安卓Mobile Sdk开发(二)连接无人机,获取无人机信息 大疆无人机安卓Mobile Sdk开发(三)制定航点任务WaypointM ...

  7. Mastering Embedded Linux Programming 学习 (五)在百问网157开发板上,解决网络配置问题

    Mastering Embedded Linux Programming 学习 (五)在百问网157开发板上,解决网络配置问题 思考.参考 搜索发现,需要配置设备树,参考这个链接 修改设备树 找到百问 ...

  8. 乐鑫Esp32学习之旅 安信可 ESP32-Cam 摄像头开发板二次开发 C SDK编程,拍照图片通过有线串口传到上位机PC端。(附带设备端+PC端源码)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...

  9. 【Qt+OpenCV项目开发学习】二、图片查看器应用程序开发

    一.前言 本博客将讲解如何用Qt+OpenCV开发一款图片查看器的Windows应用程序,其实不用OpenCV也能开发出这类软件,作者目的是为了学习Qt+OpenCV开发项目,所以会使用OpenCV, ...

最新文章

  1. 岗位内推 | 阿里巴巴达摩院决策智能实验室招聘全职/实习生
  2. org.springframework.jdbc.core.JdbcTemplate 无法import原因分析
  3. Memcached:列出所有Key
  4. Java多线程系列(九):CountDownLatch、Semaphore等4大并发工具类详解
  5. 王者荣耀服务器维护bug,8月23日王者荣耀ios版更新一直显示维护是什么情况?更新出现bug 附处理方法...
  6. 浪潮云海OpenStack X版本技术贡献中国第一
  7. 使用正则表达式获取连接字符串某项的值
  8. Anaconda安装,linux操作系统学习
  9. 4-1 ADO.NET简介 4
  10. 深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP
  11. 【太阳辐射预测】基于matlab BP神经网络太阳辐射预测【含Matlab源码 883期】
  12. CCF_Java_201909-3_字符画
  13. 2021-3-4大学化学无机化学原理(1)理想气体的状态方程和分压定律
  14. java中display中的属性_全面解析display属性
  15. html5自动播放视频
  16. 你需要知道的50颗卫星:地球卫星清单
  17. 弥散阴影html,弥漫投影的制作(也叫弥散投影)
  18. 算法学习FFT系列(2):快速数论变换NTT bzoj3992: [SDOI2015]序列统计例题详解
  19. UTF—8与UTF—8(无bom)格式
  20. 程序员有必要参加软考吗?

热门文章

  1. 怎样才能算好的家居“无主灯”照明设计
  2. android 导入到通讯录
  3. python画函数图像
  4. c语言数组去重的函数,C语言之函数 - osc_wpg0dgym的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 群玩小游戏sdk一键接入
  6. [浅析]UE4动画之IK
  7. pycrypto安装错误
  8. 想开一个外贸公司你需要知道这些
  9. php网页自定义头像系统,怎样用canvas实现自定义头像功能
  10. 【Matplotlib】python绘制箱形图