StretchBlt 

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

原型:

BOOL StretchBlt(

HDC hdcDest,

int nXOriginDest, int nYOriginDest,  int nWidthDest, int nHeighDest,

HDC hdcSrc,

int nXOriginSrc,   int nYOriginSrc,   int nWidthSrc,   int nHeightSrc,

DWORD dwRop);

参数:

hdcDest:指向目标设备环境的句柄。

nXOriginDest、nYOriginDest:指定目标矩形左上角的X轴和Y轴坐标,按逻辑单位表示。

nWidthDest、nHeightDest:指定目标矩形的宽度和高度,按逻辑单位表示。

hdcSrc:指向源设备环境的句柄。

nXOriginSrc、nYOriginSrc:指向源矩形区域左上角的X轴和Y轴坐标,按逻辑单位表示。

nWidthSrc、nHeightSrc:指定源矩形的宽度和高度,按逻辑单位表示。

dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括画刷、源位图和目标位图等对象。参考 BitBlt 可了解常用的光栅操作码列表。

在Windows CE 1.0和1.01版中,参数dwRop只支持SRCCOPY 和 SRCINVERT 

返回值:

如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。若想获得更多的错误信息,请调用GetLastError函数。

说明:

StretchBlt函数在内存中对源位图进行扩展或压缩,然后将结果拷贝到目标矩形中。如果模板要与结果组合,则在扩展后的位图拷贝到目标矩形后才组合。

当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误(函数返回FALSE)。

如果指定的光栅操作需要画刷,那么系统使用当前已被选入到目标DC的画刷。

目标坐标使用当前为目标DC指定的转换方式进行转换。源坐标则使用当前为源DC指定的转换方式进行转换。

如果源转换发生了旋转或剪接,将产生错误。

如果目标位图、源位图和模板位图的颜色格式不一致,StretchBlt会转换源位图和模板位图以匹配目标位图。

如果要将黑白位图转换为彩色位图,它将背景色设置为白位(1),前景色设置为黑位(0)。如果要将彩色位图转换为黑白位图,函数设置与背景色匹配的像素为白(1),其它像素为黑(0),用到了带颜色的设备上下文中的前景色和背景色。

如果nWidthSrc和nWidthDest或者nHeightSrc和nHeightDest大小不同,StretchBlt创建一个位图镜像。

如果nWidthSrc和nWidthDest不同,函数按照X轴创建位图镜像。

如果nHeightSrc和nHeightDest 不同,函数按照Y轴创建位图镜像。

Windows CE 1.0 和 1.01 不支持镜像。

并不是所有设备都支持StretchBlt,调用GetDeviceCaps获取支持。

如果hdc指定镜像DC,水平坐标将从右到左增加,而不是从左到右。

更多关于从右到左向位块传输显示信息(For information about blitting to displays with right-to-left orientations),参见 Creating Bitmaps

SetSTretchBltMode

该函数可以设置指定设备环境中的位图拉伸模式。

原型:

int SetSTretchBltMode(HDC hdc, int iStretchMode);

参数:

hdc:设备环境句柄。

iStretchMode:指定拉伸模式。它可以取下列值,这些值的含义如下:

描述

BLACKONWHITE

对消除的和存在的像素的颜色值进行布尔AND(与)操作运算。如果该位图是单色位图,那么该模式以牺牲白色像素为代价,保留黑色像素点。

COLORONCOLOR

删除像素。该模式删除所有消除的像素行,不保留其信息。

BILINEAR

在X和Y轴方向线性修改颜色值。该模式仅当缩放源图像时工作,剪切时无效。该模式只在SRCCOPYSRCAND, andSRCPAINT 光栅操作下工作。如果设置为其他光栅操作符,COLORONCOLOR 模式将被用于大于1bpp位深的位图,BLACKONWHITE 模式将被用于1bpp位深的位图。

返回值:

如果函数执行成功,那么返回值就是先前的拉伸模式,如果函数执行失败,那么返回值为0。若想获得更多错误信息,请调用GetLastError函数,该值可能为下面的值

意义

ERROR_INVALID_PARAMETER

一个或多个输入参数非法

说明:

拉伸模式在应用程序调用StretchBit函数时定义系统如何将位图的行或列与显示设备上的现有像素点进行组合。

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

HALFTONE模式比其他三种模式需要对源图像进行更多的处理,也比其他模式慢,但它能产生高质量图像,也应注意在设置HALFTONE模式之后,应调用SetBrushOrgEx函数以避免出现刷子没对准现象。

根据设备驱动程序的功能不同,其他一些拉伸模式也可能有效。

StretchBlt的更多相关文章

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

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

  2. TransparentBlt、StretchBlt与BitBlt三个函数的区别

    jackyhwei 发布于 2011-10-13 10:55 点击:1080次  来自:blog.csdn.net/weiqubo BOOL StretchBlt( int x, //指定目的矩形区域 ...

  3. StretchBlt 提高图片显示质量的方法

    通过SetStretchMode(STRETCH_HALFTONE)实现,同时注意重新设置画刷起点 LRESULT CMainDlg::OnPaint(UINT uMsg, WPARAM wParam ...

  4. Delphi 7中对StretchBlt, StretchDIBits, DrawDibDraw, BitBlt 的性能测试 - 原创

    我的天哪,上一篇博文是2年前的事情了.看来又虚度了2年光阴,继续学习... 本文算是副产品,正品是利用FFmpeg从任意视频中生成GIF片段的小程序,等写完了再发.不为别的,只是为了给儿子做动图,且看 ...

  5. BitBlt 函数 详解, StretchBlt、SetStretchBltMode、SetBrushOrgEx 按句柄截图、直接截取缩略图

    BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境. 函数原型 [DllImport("gdi32.dll")] publi ...

  6. StretchBlt和StretchDIBits

    StretchBlt:从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩,如果目标设备是窗口DC,则意味着在窗口绘制位图,大致的使用代码如下: void DrawImag ...

  7. 【转】【MFC】 StretchBlt绘图图像失真

    MFC中位图伸缩函数StretchBlt在对图片进行缩放时会造成严重的图片失真. 在了解解决方法前先巩固下StretchBlt的用法: StretchBlt 函数功能:函数从源矩形中复制一个位图到目标 ...

  8. StretchBlt函数和BitBlt函数的用法

    StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的 ...

  9. 【VS开发】MFC学习之 解决StretchBlt()图片缩放绘图失真

    vc中位图伸缩函数StretchBlt在对图片进行缩放时会造成严重的图片失真.在了解解决方法前先巩固下StretchBlt的用法: StretchBlt 函数功能:函数从源矩形中复制一个位图到目标矩形 ...

随机推荐

  1. @Primary和@Qualifier这两个注解的意思(一句话概括)(二十七)

    @Primary和@Qualifier这两个注解的意思: @Primary:  意思是在众多相同的bean中,优先使用用@Primary注解的bean. @Qualifier : 这个注解则指定某个b ...

  2. ENUMSTXT.H中的指针数组

    /************************************************************************                            ...

  3. 201621123010《Java程序设计》第8周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 答:如图,可见co ...

  4. 用 Unity 和 HTC Vive 实现高级 VR 机制(1)

    原文:Advanced VR Mechanics With Unity and the HTC Vive Part 1 作者:Eric Van de Kerckhove 译者:kmyhy VR 从来没 ...

  5. Codeforces 165 E. Compatible Numbers【子集前缀和】

    LINK 题目大意 给你一个数组,问你数组中的每个数是否可以在数组里面找到一个数和他and起来是0,如果可以就输出这个数,否则就输出-1 思路 首先很显然的是可以考虑找到每个数每一位都取反的数的子集 ...

  6. YAML文件格式入门

    YAML快速入门 https://www.jianshu.com/p/97222440cd08 https://yaml.org/spec/1.2/spec.pdf http://nodeca.git ...

  7. test20181020 B君的第二题

    题意 分析 考场70分 一看就是裸的kmp,直接打上去. #include<cstdlib> #include<cstdio> #include<cmath> #i ...

  8. System.Drawing.Drawing2D.LinearGradientBrush

    https://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.lineargradientbrush(v=vs.110).aspx ...

  9. vCenter 6.5安装

    http://guanjianfeng.com/archives/1160269 最近,VMware发布了vSphere 6.5版本,之前的最新版本为6.0.新版本已经开始试行使用HTML5来管理vS ...

  10. Androoid studio 2.3 AAPT err(Facade for 596378712): \\?\C:\Users\中文文件夹\.android\build-cache

    错误如下: Error:Some file crunching failed, see logs for details Error:Execution failed for task ':app:m ...