当用以下函数加载一张位图时,当窗口发生重绘更改大小时,位图将失真:

BOOL CGraphicView::OnEraseBkgnd(CDC* pDC)
{// TODO: Add your message handler code here and/or call defaultCBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP2);BITMAP bmp;bitmap.GetBitmap(&bmp);CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);dcCompatible.SelectObject(&bitmap);CRect rect;GetClientRect(&rect);pDC->SetStretchBltMode(COLORONCOLOR); //设置在指定设备内容中的伸展模式。解决失真问题。//pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);return TRUE;
}

SetStretchBltMode函数设置在指定设备内容中的伸展模式。

参考:http://baike.baidu.com/view/1080401.htm

int SetStretchBltMode(

HDC hdc,           // DC的HANDLE

int iStretchMode   // 位图伸展模式

);

Hdc:输入,设备内容的HANDLE

iStretchMode:输入,指定的伸展模式,参数可以下面值之一:

描述

BLACKONWHITE

执行一个布尔AND操作在要删除的存在的图素上。如果位图是一个单色位图,这个模式保留黑色的像素为白色的像素。

COLORONCOLOR

删除像素,这个模式删除所有待删除的像素行,而不保留他们的信息。

HALFTONE

从源矩形映射像素到指定的目标矩形。目标和源矩形的平均颜色是相似的。

在设置HALFTON伸展模式之后,应用程序必须调用SetBrushOrgEx函数来设置刷源。如果该调用失败了,刷子将不对齐。

This option is not supported on Windows 95/98/Me.

STRETCH_ANDSCANS

Same as BLACKONWHITE.

STRETCH_DELETESCANS

Same as COLORONCOLOR.

STRETCH_HALFTONE

Same as HALFTONE.

STRETCH_ORSCANS

Same as WHITEONBLACK.

WHITEONBLACK

执行一个布尔或操作,使用待删除的存在的像素的颜色。如果位图是一个单色的位图,这个模式将保留白色的像素为黑色像素。

返回值:

如果函数成功,返回先前的伸展模式

如果失败,返回0

WINDOWS NT/2000/XP:使用GetLastError可以得到更多的信息,下面是其中之一:

意义

ERROR_INVALID_PARAMETER

一到多个参数无效

备注:

伸展模式定义了程序调用StretchBlt函数的时候怎么样在显示设备上用存在的像素合并位图行或列。

BLACKONWHITE (STRETCH_ANDSCANS)和WHITEONBLACK (STRETCH_ORSCANS)典型的用来保留单色位图的前景像素。COLORONCOLOR (STRETCH_DELETESCANS)模式通常用来保留彩色位图中的颜色。

HALFTONE相对较慢,并要求更多的源图象处理,但提供较高的图像质量。同样SetBrushOrgEx也不惜是HALFTON模式以免刷子不对齐。

另外,伸展模式也依赖于设备驱动器的能力。

解决位图失真-SetStretchBltMode相关推荐

  1. OpenGL.Shader:12-阴影实现 - 解决阴影失真

    OpenGL.Shader:12-阴影实现 - 解决阴影失真 紧接上文的内容,那么怎么解决阴影失真的问题呢?这些问题其实都是不可回避的存在,现代技术只能尽量优化效果已达以假乱真的效果. 首先回到深度纹 ...

  2. 【VS开发】解决位图缩放失真

    当用以下函数加载一张位图时,当窗口发生重绘更改大小时,位图将失真: CBitmap bitmap;   bitmap.LoadBitmap(IDB_BITMAP2); BITMAP bmp;   bi ...

  3. 使用StretchBlt函数导致位图失真的解决方案

    本文转自网络. vc中位图伸缩函数StretchBlt在对图片进行缩放时会造成严重的图片失真,在了解解决方法前先巩固下StretchBlt的用法: StretchBlt 函数功能: 函数从源DC中复制 ...

  4. html怎样图片不会失真,css解决图片失真

    css image-rendering属性用于浏览器如何处理图片呈现.IE下使用-ms-interpolation-mode,在IE7下只支持图片不支持透明,且默认值为"nearest-ne ...

  5. JS生成二维码以及保存页面为图片的解决方案:html2Canvas+file-saver+qrcodejs2的使用心得以及解决图片失真,保存不完整的解决办法

    前言 最近因为工作需求,需要前端根据后端传过来的链接生成二维码,并且要使用JS保存页面为图片.然后网上搜了很多解决办法.最终都是用h5的canvas进行绘制然后保存为图片.其中,又以html2Canv ...

  6. 如何把UIView转成UIImage,解决模糊失真问题

    最近工作中,遇到一个需求,需要把一个UIView对象转成UIImage对象显示.经过网络搜索,找到如下答案: ? 1 2 3 4 5 6 7 8 -(UIImage*)convertViewToIma ...

  7. java图片失真_java 图片合成 解决图片失真问题

    /** * 图二的位置 从左上角开始 * @param x * @param y */ public void createPicTwo(int x,int y) { try { //读取第一张图片 ...

  8. css解决图片失真问题

    1.背景图片失真 .con{height:100vh;width:100vm;background: url(../../assets/login/background.png) 100% 100%; ...

  9. java 图片合成 红色失真_java 图片合成 解决图片失真问题

    源代码/** * * @param filesrc * @param logosrc * @param outsrc * @param x 位置 * @param y 位置 */ public voi ...

最新文章

  1. 封装echarts china map geo实现dispatch触发geoSelect事件高亮显示某个省份和城市,并定义复杂样式
  2. Linux下压力测试工具Webbench介绍
  3. Python 进阶_OOP 面向对象编程_self 的实例绑定
  4. android:使用audiotrack 类播放wav文件
  5. jsp form表里的submit点击没反应
  6. echarts 3d饼图_echarts构建关系图,节点可收缩和展开,可添加点击事件
  7. Android使用百度翻译api
  8. JS void运算符
  9. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ
  10. FLUSH TABLES WITH READ LOCK有多快
  11. 【论文笔记】From Facial Parts Responses to Face Detection: A Deep Learning Approach
  12. php array函数 array_sum 求数组所有值和
  13. Mybatis快速入门并实现CRUD操作
  14. wget下载github的releases的软件
  15. WORD目录三级标题行间距太大 目录标题行间距
  16. ES6——Promise笔记
  17. Cannot find SourceMap 'XXX.js.map'问题解决
  18. QT中的Singal\slot机制
  19. chatgpt研究框架 --技术路线-行业进程研究
  20. o.s.b.d.LoggingFailureAnalysisReporter报错

热门文章

  1. 看故事,看懂新版FMEA!
  2. 旋转三维平面与某一坐标平面平行
  3. 航天信息: 打造政企服务体系
  4. 如何从Arxiv预出版网站导出论文到NoteExpress
  5. 38、静默活体检测测试及ncnn、mnn部署
  6. 黑马-大事件项目(总结+BUG修复)
  7. 【0718】 代码管理平台
  8. 国产软件应成为信息安全的顶梁柱
  9. RS232/RS485/MODBUS理解
  10. 网络安全-日志监控-关联分析-大数据