• 解决位图失真-SetStretchBltMode()


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

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

    |=======================================| | 既然选择了远方,便只顾风雨兼程! | |=======================================|
  • 相关阅读:
    从Android Launcher源码学习自定义标签
    Android的TextView使用Html来处理图片显示、字体样式、超链接等
    mysql的字符串函数
    JavaScript求当月天数
    keycode对照表
    Android onMeasure方法介绍
    SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替
    表单的内容用WORD形式保存
    在LOTUS NOTES 中通过ODBC访问关系数据库的方法
    通过LEI技术实现NOTES与SQL2000数据交换
  • 原文地址:https://www.cnblogs.com/mr-m/p/3546049.html
Copyright © 2020-2023  润新知