StretchBlt
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轴方向线性修改颜色值。该模式仅当缩放源图像时工作,剪切时无效。该模式只在SRCCOPY, SRCAND, andSRCPAINT 光栅操作下工作。如果设置为其他光栅操作符,COLORONCOLOR 模式将被用于大于1bpp位深的位图,BLACKONWHITE 模式将被用于1bpp位深的位图。 |
返回值:
如果函数执行成功,那么返回值就是先前的拉伸模式,如果函数执行失败,那么返回值为0。若想获得更多错误信息,请调用GetLastError函数,该值可能为下面的值。
|
值 |
意义 |
|
ERROR_INVALID_PARAMETER |
一个或多个输入参数非法 |
说明:
拉伸模式在应用程序调用StretchBit函数时定义系统如何将位图的行或列与显示设备上的现有像素点进行组合。
BLACKONWHITE(STRETCH_ANDSCANS)和WHITEONBLACK(STRETCH_ORSCANS)模式典型地用来保留单色位图中的前景像素。COLORONCOLOR(STRETCH_DELETESCANS)模式则典型地用于保留彩色位图中的颜色。
HALFTONE模式比其他三种模式需要对源图像进行更多的处理,也比其他模式慢,但它能产生高质量图像,也应注意在设置HALFTONE模式之后,应调用SetBrushOrgEx函数以避免出现刷子没对准现象。
根据设备驱动程序的功能不同,其他一些拉伸模式也可能有效。
StretchBlt的更多相关文章
- VC++中StretchBlt图像失真问题的解决办法
在 VC 中使用 StretchBlt 会碰到一些与点阵图大小缩放相关的一些问题.在扩展一个点阵图时,StretchBlt必须复制图素行或列.如果放大倍数不是原图的整数倍,那么此操作会造成产生的图像有 ...
- TransparentBlt、StretchBlt与BitBlt三个函数的区别
jackyhwei 发布于 2011-10-13 10:55 点击:1080次 来自:blog.csdn.net/weiqubo BOOL StretchBlt( int x, //指定目的矩形区域 ...
- StretchBlt 提高图片显示质量的方法
通过SetStretchMode(STRETCH_HALFTONE)实现,同时注意重新设置画刷起点 LRESULT CMainDlg::OnPaint(UINT uMsg, WPARAM wParam ...
- Delphi 7中对StretchBlt, StretchDIBits, DrawDibDraw, BitBlt 的性能测试 - 原创
我的天哪,上一篇博文是2年前的事情了.看来又虚度了2年光阴,继续学习... 本文算是副产品,正品是利用FFmpeg从任意视频中生成GIF片段的小程序,等写完了再发.不为别的,只是为了给儿子做动图,且看 ...
- BitBlt 函数 详解, StretchBlt、SetStretchBltMode、SetBrushOrgEx 按句柄截图、直接截取缩略图
BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境. 函数原型 [DllImport("gdi32.dll")] publi ...
- StretchBlt和StretchDIBits
StretchBlt:从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩,如果目标设备是窗口DC,则意味着在窗口绘制位图,大致的使用代码如下: void DrawImag ...
- 【转】【MFC】 StretchBlt绘图图像失真
MFC中位图伸缩函数StretchBlt在对图片进行缩放时会造成严重的图片失真. 在了解解决方法前先巩固下StretchBlt的用法: StretchBlt 函数功能:函数从源矩形中复制一个位图到目标 ...
- StretchBlt函数和BitBlt函数的用法
StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的 ...
- 【VS开发】MFC学习之 解决StretchBlt()图片缩放绘图失真
vc中位图伸缩函数StretchBlt在对图片进行缩放时会造成严重的图片失真.在了解解决方法前先巩固下StretchBlt的用法: StretchBlt 函数功能:函数从源矩形中复制一个位图到目标矩形 ...
随机推荐
- oracle分区交换技术
交换分区的操作步骤如下: 1. 创建分区表t1,假设有2个分区,P1,P2.2. 创建基表t11存放P1规则的数据.3. 创建基表t12 存放P2规则的数据.4. 用基表t11和分区表T1的P1分区交 ...
- ViewPager + Fragment 实现主界面底部导航栏
1. 四个类似的Frament布局 tab_main_fragment.xml <LinearLayout xmlns:android="http://schemas.android. ...
- 201621123006 《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至少2种 ...
- java模板导出PDF
本次完善综合特点: 一对一,点对点的给对应的地方写值,比如模板里面放了个name标识,在程序里把“张三”赋给name,那么输出的pdf里面name的地方就变成了张三,准确方便快捷 支持中文,可以使用自 ...
- 重新理理C++:从《c++ primer》开始
以前学过C++,但是感觉很多东西还是不清不楚,很多问题解决起来啃吧啃吧的.... 即使c++的东西看过,但是这本书看起来速度还是提不上去,确实需要扎实扎实.很多以前只会用的东西,这本书上都讲的很清楚, ...
- NOIP模拟赛(洛谷11月月赛)
T1 终于结束的起点 题解:枚举啊... 斐波那契数 第46个爆int,第92个爆long long.... 发现结果一般是m的几倍左右....不用担心T. #include<iostream ...
- Eclipse添加中文javadoc
SUN官方API中文版[JDK1.6]1.6API文档(中文)的下载地址:ZIP格式用来设置javadoc,下载地址:http://download.java.net/jdk/jdk-api-loca ...
- jquery类的创建方式及关键字new的原理
一.由jQuery创建类引发的问题 在用jQuery选择器时候,可以通过下面两种方式获取元素,并得到一个jQuery对象. var d1 = jQuery('#demo01'); var d2 = n ...
- cocos2dx 安卓真机调试问题汇总
cocos compile编译apk问题汇总: 1,dx编译报错,没有足够的空间 ANTBUILD : [dx] error : Could not create the Java Virtual M ...
- sql server获取插入记录后的ID
select @@IDENTITY --返回为当前会话的所有作用域中的任何表最后生成的标识值. select IDENT_CURRENT('table_name') --返回为任何会话和任何作用域中的 ...