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

CBitmap 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->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

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

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模式以免刷子不对齐。 另外,伸展模式也依赖于设备驱动器的能力。

【VS开发】解决位图缩放失真的更多相关文章

  1. 解决位图失真-SetStretchBltMode()

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

  2. delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法

    delphi 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法 若有更好的,请大神留言我也学习下,感谢! uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var  Bi ...

  3. 安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)

    安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04|  分类: 技术 |  标签:安卓  技术  java  | ...

  4. Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

     Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halco ...

  5. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  6. Webapp meta标签解决移动缩放的问题

    webapp开发初期,会碰到在pc端开发好的页面在移动端显示过大的问题,这里需要在html head中加入meta标签来控制缩放 <meta name=" viewport" ...

  7. 微信开发解决if...else..的臃肿

    开发中难以避免if...else (switch case ),大量的if...else 让代码可读性低...难以维护 无论是接手别人的代码还是自己写的代码,因为开发周期短可能就往往忽略了这一点. 久 ...

  8. springboot 前后端分离开发解决跨域访问

    最近新学习了Java EE开发框架springboot,我在使用springboot前后台分离开发的过程中遇到了跨域求问题.在网上寻找答案的过程中发现网上的解决方案大多比较零散,我在这里整理一个解决方 ...

  9. git 多人开发解决步骤

    1.pull -- 开发 -- pull -- 解决冲突(如果有) -- commit -- push   (PS 老子今天很烦躁)    

随机推荐

  1. VS开发框架DevExtreme v19.1全解析!全新的UI小部件

    行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExtreme Complete Subscription v19.1中全新发布的Dro ...

  2. 01Two Sum题解

    Tow Sum 原题概述: Given an array of integers, return indices of the two numbers such that they add up to ...

  3. rem等比例自适应手机尺寸

    方法:用sass的函数动态计算rem值 $rem : 75px;基准值 设计图是750的宽 设为$rem变量设为75,设计图是350的宽 设为$rem变量设为35,老的写法 需要用js来配合来动态改变 ...

  4. conda查看某个安装包的依赖项

    查看某个安装包XXX的依赖项的conda指令为: conda search XXX -info 比如XXX为pytorch0.3.1,就会有如下输出: pytorch 0.3.1 py36hfbe70 ...

  5. 前端MVC、MVVM的简单实现

    MVC MVC是一种设计模式,它将应用划分为3个部分:数据(模型).展示层(视图)和用户交互层.结合一下下图,更能理解三者之间的关系.换句话说,一个事件的发生是这样的过程 用户和应用交互 控制器的事件 ...

  6. C++入门经典-例5.9-使用空类型指针执行函数

    1:运行代码: // 5.9.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  7. mysql 查询每个分组的前几名

    按分组排序,并查出每个分组的前3名 单表 SELECT * FROM ( SELECT ZONEID, uid, NAME, fight, IF ( , ) AS rank, ( @zone := z ...

  8. HearthBuddy炉石兄弟 Method 'CollectionDeckBoxVisual.IsValid' not found.

    [CollectionManagerScene_COLLECTION] An exception occurred when calling CacheCustomDecks: System.Miss ...

  9. yconsole使用说明

    介绍: yconsole是yhd用于管理缓存的工具(python实现),它的主要功能是为各个应用分配和管理缓存,以及错误修复.和它配合使用的还有ycache-client.yagent.zookeep ...

  10. kolla-ansible-----cinder存储配置

    对接lvm后端存储 1.创建vg 可以使用裸盘或者可以采用Das.iscsi-san.fc-san等方式经存储映射到宿主机本地,然后在进行如下操作 (a)创建LVM 物理卷 /dev/sdb pvcr ...