描述
SetDIBitsToDevice函数使用DIB中的颜色数据设置与目标设备上下文关联的设备上指定矩形中的像素。
Windows 98 / Me,Windows 2000 / XP / Vista / Windows 7:SetDIBitsToDevice已被扩展为允许将JPEG或PNG图像作为源图像传递。
C++ 语法
int SetDIBitsToDevice( __in HDC hdc, __in int XDest, __in int YDest, __in DWORD dwWidth, __in DWORD dwHeight, __in int XSrc, __in int YSrc, __in UINT uStartScan, __in UINT cScanLines, __in const VOID *lpvBits, __in const BITMAPINFO *lpbmi, __in UINT fuColorUse ); |
PowerBASIC 语法
FUNCTION SetDIBitsToDevice( _ BYVAL hdc AS DWORD, _ BYVAL XDest AS LONG, _ BYVAL YDest AS LONG, _ BYVAL dwWidth AS DWORD, _ BYVAL dwHeight AS DWORD, _ BYVAL XSrc AS LONG, _ BYVAL YSrc AS LONG, _ BYVAL uStartScan AS DWORD, _ BYVAL cScanLines AS DWORD, _ BYREF lpvBits AS ANY, _ BYREF lpbmi AS BITMAPINFO, _ BYVAL fuColorUse AS DWORD _ ) AS LONG |
参数
hdc
[in]处理设备上下文。
XDest
[in]指定目标矩形左上角的x坐标(以逻辑为单位)。
YDest
[in]指定目标矩形左上角的y坐标(以逻辑为单位)。
dwWidth
[in]指定DIB的逻辑单位宽度。
dwHeight
[in]指定DIB的高度(以逻辑为单位)。
XSrc
[in]指定DIB左下角的x坐标(以逻辑为单位)。
YSrc
[in]以逻辑单位指定DIB左下角的y坐标。
uStartScan
[in]指定DIB中的起始扫描行。
cScanLines
[in]指定由lpvBits参数指向的数组中包含的DIB扫描线数。
lpvBits
[in]指向存储为字节数组的DIB颜色数据的指针。有关详细信息,请参阅以下备注部分。
lpbmi
[in]指向包含DIB信息的BITMAPINFO结构的指针。
fuColorUse
[in]指定BITMAPINFO结构的bmiColors成员是否包含显式的红色,绿色,蓝色(RGB)值或索引到调色板。有关详细信息,请参阅以下备注部分。
fuColorUse参数必须是以下值之一。
值 |
含义 |
DIB_PAL_COLORS |
颜色表由当前选择的逻辑调色板中的16位索引阵列组成。 |
DIB_RGB_COLORS |
颜色表包含文字RGB值。 |
返回值
如果功能成功,则返回值是设置的扫描线数。
如果函数失败,返回值为零。
Windows NT / 2000 / XP / Vista / Windows 7:要获取扩展错误信息,请调用GetLastError.
Windows 98 / Me,Windows 2000 / XP / Vista / Windows 7:如果驱动程序不支持传递给SetDIBitsToDevice的JPEG或PNG文件镜像,则该函数将失败并返回GDI_ERROR。如果发生故障,应用程序必须自行退回到自己的JPEG或PNG支持中,将映像解压缩为位图,然后将位图传递给SetDIBitsToDevice.
备注
当位图位是系统调色板的索引时,获得最佳位图绘制速度。
应用程序可以通过调用GetSystemPaletteEntries函数来检索系统调色板颜色和索引。在检索到颜色和索引后,应用程序可以创建DIB。
自下而上的DIB的起源是位图的左下角;自顶向下的DIB的原点是左上角。
为了减少从设备表面上的大型DIB设置位所需的内存量,应用程序可以通过重复调用SetDIBitsToDevice来对带宽进行分频,每次将位图的不同部分放置到lpvBits阵列中。uStartScan和cScanLines参数的值标识lpvBits阵列中包含的位图的部分。
如果在前台运行全屏MS-DOS会话时,后台运行的进程调用SetDIBitsToDevice函数,则返回错误。
Windows 98 / Me,Windows 2000 / XP / Vista / Windows 7:
· | 如果BITMAPINFOHEADER的biCompression成员为BI_JPEG或BI_PNG,则lpvBits指向包含JPEG或PNG图像的缓冲区。biSizeImage成员指定缓冲区的大小。必须将fuColorUse参数设置为DIB_RGB_COLORS。 |
· | 为确保在打印时正确的元文件假脱机,应用程序必须调用CHECKJPEGFORMAT或CHECKPNGFORMAT转出,以确认打印机在致电SetDIBitsToDevice之前分别识别JPEG或PNG图像。 |
ICM:如果通过调用SetICMMode将iEnableICM参数设置为ICM_ON启用了颜色管理,则执行颜色管理。如果lpbmi指定的位图具有指定伽玛和端点成员的BITMAPV4HEADER或指定伽玛和端点成员或profileData和profileSize成员的BITMAPV5HEADER,则该调用将位图的像素视为在这些成员描述的颜色空间中表达,而不是在设备上下文的源颜色空间中。
引用文件 #INCLUDE Once
WinGdi.inc(包括Windows.inc)