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 函数功能:函数从源矩形中复制一个位图到目标矩形 ...
随机推荐
- 简述 AJAX 及基本步骤
简述 AJAX:AJAX即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行 ...
- HDU 1241 Oil Deposits bfs 难度:0
http://acm.hdu.edu.cn/showproblem.php?pid=1241 对每个还未访问的点bfs,到达的点都标为一块,最后统计有多少块即可 #include <cstdio ...
- Double H2.0
Double H2.0 https://www.cnblogs.com/wxh9494/p/9879442.html 选题报告 一.项目描述(Project Description) 本项目提供一个公 ...
- selenium对应三大浏览器(谷歌、火狐、IE)驱动安装
selenium:v3.7.0 一.谷歌浏览器 chromdriver.exe 根据自己谷歌浏览器版本安装对应chromedriver的版本. 我电脑谷歌版本是65的,装的v2.36版,链接:http ...
- Beta阶段第2周/共2周 Scrum立会报告+燃尽图 14
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411] 版本控制:https://git.coding.net/liuyy08 ...
- I.MX6 7" navigation bar as black bar
/********************************************************************************* * I.MX6 7" n ...
- 《DSP using MATLAB》Problem 2.5
2.代码: %% ------------------------------------------------------------------------ %% Output Info abo ...
- 创建自定义graphql-binding
graphql-binding 是一个比较方便强大的工具,方便我们进行代码生成以及开发gateway的功能 项目初始化 使用prisma cli 使用脚手架 prisma init appdemo ? ...
- fusionjs 学习一 基本试用
参考demo 项目 https://github.com/rongfengliang/fusionjs-docker-demo 安装 create startkit yarn global add c ...
- 为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕?
为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕? 在设置中设置了很多方法,但不管怎么设置就是不行,不到一分钟一定关屏幕. 开始以为是能源之星引起,查了相关资料说不是,那个能源之星标志只 ...