前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >StretchDIBits用法

StretchDIBits用法

作者头像
全栈程序员站长
发布2022-09-07 10:45:41
4210
发布2022-09-07 10:45:41
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

转自:http://blog.csdn.net/giantchen547792075/article/details/6996011

StretchDIBits 函数把DIB、JPEG、PNG图像中一矩形区域内的像素颜色数据复制到指定的目标矩形里。如果目标矩形大于源矩形,此函数将拉伸的行和列以适合目标矩形的颜色数据。如果目标矩形小于源矩形,则此函数使用指定的光栅操作压缩的行和列。(Note:整幅图像都会被显示在一个矩形区域中,这个矩形区域不许显示原图全貌)

语法:

int StretchDIBits (HDC hdc,int XDest,YDest,int int nDestWidth,int nDestHeight,int XSrc,int YSrc,int nSrcWidth,int nSrcHeight,const VOID __in * lpBits,__in const BITMAPINFO * lpBitsInfo,__in UINT iUsage,__in dword = dwRop) ;

参数:

hdc [in] (Note:不知道这[in]代表什么暂且认为它并不重要吧)

目标设备上下文的句柄。

XDest [in]

角点的 x 坐标,以逻辑单位的目标矩形的左上角。

YDest [in]

Y 坐标,逻辑单位上的目标矩形的左上角。

nDestWidth [in]

逻辑单位,目标矩形的宽度。

nDestHeight [in]

逻辑单位,目标矩形的高度。

XSrc [in]

角的 x 坐标,以像素为单位,源矩形图像中。

YSrc [in]

Y 坐标,以像素为单位,源矩形图像中。

nSrcWidth [in]

宽度,以像素为单位,源矩形图像中。

nSrcHeight [in]

高度以像素为单位,源矩形图像中。

lpBits [in]

图像的位,作为字节数组存储的指针。有关详细信息,请参见备注部分。

lpBitsInfo [in]

指向包含DIB 相关信息的 BITMAPINFO 结构的指针。

iUsage [in]

指定是否提供的 BITMAPINFO 结构的 bmiColors 成员,以及若然,是否 bmiColors 包含显式的红、 绿、 蓝 (RGB) 值或索引。IUsage 参数必须是下列值之一。

备注

DIB_RGB_COLORS

颜色表中包含文本的 RGB 值。

DIB_PAL_COLORS

该数组包含到源设备上下文的逻辑调色板的 16 位索引。

dwRop [in]

指定的方式组合在一起以形成新的图像源像素、 目标设备上下文的当前画刷和目标像素。有关详细信息,请参阅下面的备注部分。

返回值

如果函数成功,则返回值是扫描复制的行数。请注意,此值可以为负的镜像内容。

如果该函数失败,或者没有扫描行被复制,则返回值为 0。

如果驱动程序不支持 JPEG 或 PNG 文件图像传递给 StretchDIBits,该函数将失败并返回 GDI_ERROR。如果发生故障,应用程序必须依靠自己的 JPEG 或 PNG 支持,将图像的解压缩成位图,然后将该位图传递给 StretchDIBits。

备注

自底向上 DIB 的起始位置是左下角 ;自上而下 DIB 的起始位置是左上角。

StretchDIBits 创建一个位图镜的像图像,如果nSrcWidth 和 nDestWidth 这两个参数或 nSrcHeight 和 nDestHeight这两个参数的符号不同。NSrcWidth 和 nDestWidth 的符号不同,那么该函数创建一个沿 x 轴镜像的位图图像。NSrcHeight 和 nDestHeight 的符号不同,那么该函数创建沿 y 轴镜像的位图图像。

此函数允许 JPEG 或 PNG 图像作为源图像传入。每个参数如何使用仍保持不变,除非:

  • 如果 BITMAPINFOHEADER 的 biCompression 成员是 BI_JPEG 或 BI_PNG,lpBits 指向包含 JPEG 或 PNG 图像单独的缓冲区。BITMAPINFOHEADER 结构的 biSizeImage 成员指定缓冲区的大小。IUsage 参数不得不被设置为 DIB_RGB_COLORS。DwRop 参数不得不被设置为 SRCCOPY。
  • 为确保打印时有适当的图元文件缓存池,在调用 StretchDIBits 之前,应用程序必须调用 CHECKJPEGFORMAT 或 CHECKPNGFORMAT 转义以验证打印机可分别识别 JPEG 或 PNG 图像。

ICM: 如果通过使用 SetICMMode 的iEnableICM 参数设置为 ICM_ON的调用启用了色彩管理,那么颜色管理就会执行。如果由 lpBitsInfo 指定的位图有一指定伽马和成员终结点成员的BITMAPV4HEADER结构或一个指定 profileData 和 profileSize 的成员或伽马和成员终点结成员的 BITMAPV5HEADER 然后该位图的所有像素将被视为表达在由这些成员所述的色彩空间种而不是设备上下文的源颜色空间中。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147513.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档