VC++中StretchBlt图像失真问题的解决办法

2010年11月02日 09:56:00 gengxt2003 阅读数:7972

VC++中StretchBlt图像失真问题的解决办法

2009年05月12日 星期二 14:36

 在 VC 中使用 StretchBlt 会碰到一些与点阵图大小缩放相关的一些问题。在扩展一个点阵图时,StretchBlt必须复制图素行或列。如果放大倍数不是原图的整数倍,那么此操作会造成产生的图像有些失真。

  如果目的矩形比来源矩形小,那么StretchBlt在缩小图像时就必须把两行(或列)或者多 行(或列)的图素合并到一行(或列)。完成此操作有四种方法,它根据装置内容伸展模式属性来选择其中一种方法。您可使用 SetStretchBltMode 函数来修改这个属性。

SetStretchBltMode (hdc, iMode) ;

iMode 可取下列值:

BLACKONWHITE 或者 STRETCH_ANDSCANS(内定):如果两个或多个图素得合并成一个图素,那么StretchBlt会对图素执行一个逻辑AND运算。这样的结果是只有全部的原始图素是白色时该图素才为白 色,其实际意义是黑色图素控制了白色图素。这适用于白背景中主要是黑色的单色点阵图。

WHITEONBLACK 或 STRETCH_ORSCANS:如果两个或多个图素得合并成一个图素,那么StretchBlt 执行逻辑OR运算。这样的结果是只有全部的原始图素都是黑色时才是黑色,也就是说由白色图 素决定颜色。这适用於黑色背景中主要是白色的单色点阵图。

COLORONCOLOR 或 STRETCH_DELETESCANS:StretchBlt 简单地消除图素行或列,而没有任何逻辑组合。这是通常是处理彩色点阵图的最佳方法。

HALFTONE 或 STRETCH_HALFTONE:Windows根据组合起来的来源颜色来计算目的的平均颜色。这将与半调调色盘联合使用,第十六章将展示这一程序。

利用StretchBlt缩小图片时有时会出现颜色失真。解决步骤如下:

1、先把目标DC (也就是 HDC hDestDC) ::SetStretchBltMode (hDestDC, HALFTONE);
       2、调用一下 ::SetBrushOrgEx(hDestDC, 0, 0, NULL);
       3、最后调用 CImage 的 StretchBlt

或者这样解决:

1。hbit = (HBITMAP)LoadImage( NULL,cBmpPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    if(hbit != NULL) {
     Bitmap.Attach(hbit);
     DCCompatible.CreateCompatibleDC(GetDC());
     DCCompatible.SelectObject(&Bitmap);
     Bitmap.GetObject(sizeof(bm),&bm);}

2。OnPaint():

pDC->SetStretchBltMode(HALFTONE);
    pDC->StretchBlt(MAP_LEFT,MAP_TOP,MAP_WIDTH,MAP_HEIGHT,

&DCCompatible,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

VC++中StretchBlt图像失真问题的解决办法相关推荐

  1. VS中使用 loadimage()函数载入图像报错与图像无法载入的解决办法

    VS中使用 loadimage()函数载入图像报错与图像无法载入的解决办法 1. 载入图像报错 使用loadimage()加载图片时,程序报错界面如下图 报错内容如下: 解决方案1: 在图片名称前加个 ...

  2. ABBYY FineReader中检测不到表格的解决办法

    ABBYY FineReader是一款图文识别(OCR)软件,使用ABBYY FineReader识别带有表格的文档时,表格区域对以表格形式排列的表格或文本片断进行标记,但有时会出现程序自动检测表格失 ...

  3. 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法

    title: 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法 tags: grammar_cjkRuby: true --- 右键单击项目,properties-- ...

  4. 使用webpack打包后,vscode中vue代码变白色的解决办法

    使用webpack打包后,vscode中vue代码变白色的解决办法 卸载vetur,重装vetur

  5. java手机界面太小_手机端页面在项目中遇到的一些问题及解决办法

    原标题:手机端页面在项目中遇到的一些问题及解决办法 来源:键盘上的眼泪 segmentfault.com/a/1190000015178877 1.解决页面使用overflow: scroll在iOS ...

  6. Maven中 jar包冲突原理与解决办法依赖传递

    Maven中 jar包冲突原理与解决办法&依赖传递 管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解 ...

  7. 工作总结 EntityFramework中出现DateTime2异常的完美解决办法

    EntityFramework中出现DateTime2异常的完美解决办法 今天在使用entityframework往数据库插入数据的时候,突然出现了一个数据类型转换异常的问题: System.Data ...

  8. C中不安全的函数以解决办法汇总

    C中不安全的函数以解决办法汇总 C 中大多数缓冲区溢出问题可以直接追溯到标准 C 库.最有害的罪魁祸首是不进行自变量检查的.有问题的字符串操作(strcpy.strcat.sprintf 和 gets ...

  9. 在ASP.net中的UpdatePanel,弹窗失败解决办法

    原文:在ASP.net中的UpdatePanel,弹窗失败解决办法 最开始我用: Response.Write("<script>alert('和哈呵呵呵呵呵呵!')</s ...

最新文章

  1. 如何下载python软件-python如何下载
  2. oracle数据文件移动方法
  3. Linux LXR 网站
  4. 【Linux】一步一步学Linux——ipcrm命令(142)
  5. PHP中header函数的用法及其注意重点是什么呢
  6. python硬件测试开发工程师_硬件测试工程师
  7. 相见恨晚的 18 个 Linux 趣味命令,最后一个千万要尝试~
  8. android 仓库管理 毕业论文,基于Android的仓库管理系统的设计与实现.zip
  9. WPS有空白页老删不掉,delete和退格都删不了
  10. 计算机密码无法输完整,笔记本电脑键盘失灵无法输入密码怎么解决
  11. 音王点歌系统怎么连接服务器,KTV音响设备怎么连接?点歌机怎么连接?学习下...
  12. 【部署】蓝绿发布、滚动发布、灰度发布,有什么区别
  13. symbian3 java游戏测试,Symbian^3愤怒的小鸟测试版C7首发实测
  14. Android程序员必装apk
  15. Vue3+Vite项目配置Eslint+Prettier+Husky+Lint-Staged+Commitlint
  16. 关于华为应用市场的上架流程
  17. 2022李永乐线性代数
  18. LT8618SX 是龙迅的低功耗版本 HDMI 发射器,其基于 ClearEdgeTM 技术
  19. 山东双软认证需要什么条件
  20. 斯坦福大学的低码率音频编码博士论文

热门文章

  1. 快手创作者版App正式上线
  2. Python——实现网页模拟键盘输入和鼠标点击
  3. 蓝桥杯 算法训练 三角形面积
  4. 初一计算机说课记录,初中说课稿一堂信息技术公开课点评
  5. Autodesk AutoCAD 2024 Mac软件安装包下载Autodesk CAD2024安装教程支持M1/2芯片
  6. jQuery深入浅出(二)石头剪刀布动画实现
  7. 关于劳动合同法,你可能不知道的三个细节
  8. 手机app直播源码开发搭建
  9. layui使用wangEditor富文本插件
  10. .bat批处理(一):@echo off