CDC::StretchBlt

将位图从源矩形复制到目标矩形,必要时可拉伸或压缩位图以符合目标矩形的尺寸。

BOOL StretchBlt( 
   int x, 
   int y, 
   int nWidth, 
   int nHeight, 
   CDC* pSrcDC, 
   int xSrc, 
   int ySrc, 
   int nSrcWidth, 
   int nSrcHeight, 
   DWORD dwRop  
);

参数

  • x
    指定目标矩形左上角的 x 坐标(使用逻辑单位)。

  • y
    指定目标矩形左上角的 y 坐标(使用逻辑单位)。

  • nWidth
    指定目标矩形的宽度(使用逻辑单位)。

  • nHeight
    指定目标矩形的高度(使用逻辑单位)。

  • pSrcDC
    指定源设备上下文。

  • xSrc
    指定源矩形左上角的 x 坐标(使用逻辑单位)。

  • ySrc
    指定源矩形左上角的 y 坐标(使用逻辑单位)。

  • nSrcWidth
    指定源矩形的宽度(使用逻辑单位)。

  • nSrcHeight
    指定源矩形的高度(使用逻辑单位)。

  • dwRop
    指定要执行的光栅操作。 光栅操作代码定义 GDI 如何合并涉及当前画笔、可能的源位图和目标位图的输出操作中的颜色。 该参数可能是下列值之一:

    • BLACKNESS - 使所有输出变黑。

    • DSTINVERT - 反转目标位图。

    • MERGECOPY - 使用布尔 AND 运算符合并模式与源位图。

    • MERGEPAINT - 使用布尔 OR 运算符合并反转的源位图与目标位图。

    • NOTSRCCOPY - 将反转的源位图复制到目标。

    • NOTSRCERASE - 使用布尔 OR 运算符反转目标位图与源位图的合并结果。

    • PATCOPY - 将模式复制到目标位图。

    • PATINVERT - 使用布尔 XOR 运算符合并目标位图与模式。

    • PATPAINT - 使用布尔 OR 运算符合并反转的源位图与模式。 使用布尔 OR 运算符合并该操作的结果与目标位图。

    • SRCAND - 使用布尔 AND 运算符合并目标位图与源位图的像素。

    • SRCCOPY - 将源位图复制到目标位图。

    • SRCERASE - 反转目标位图并使用布尔 AND 运算符合并结果与源位图。

    • SRCINVERT - 使用布尔 XOR 运算符合并目标位图与源位图的像素。

    • SRCPAINT - 使用布尔 OR 运算符合并目标位图与源位图的像素。

    • WHITENESS - 使所有输出变白。

返回值

如果绘制出位图,则为非 0;否则为 0。

备注

该函数使用目标设备上下文的拉伸模式(由 SetStretchBltMode 设置)确定如何拉伸或压缩位图。

StretchBlt 函数将 pSrcDC 给定的源设备中的位图移动到其成员函数即将被调用的设备上下文对象所表示的目标设备。 xSrc、ySrc、nSrcWidth 和 nSrcHeight 参数定义源矩形的左上角和尺寸。 xy、nWidth 和 nHeight 参数提供目标矩形的左上角和尺寸。 dwRop 指定的光栅操作定义源位图和目标设备上已存在的位如何合并。

如果 nSrcWidth 与 nWidth 或 nSrcHeight 与 nHeight 参数的符号不同,则 StretchBlt 函数将创建位图的镜像。 如果 nSrcWidth 与 nWidth 符号不同,则该函数将沿 x 轴创建位图的镜像。 如果 nSrcHeight 与 nHeight 符号不同,则该函数将沿 y 轴创建位图的镜像。

StretchBlt 函数将在内存中拉伸或压缩源位图,然后将结果复制到目标。 如果一个模式将与该结果合并,则合并操作会等到拉伸的源位图复制到目标后执行。 如果使用画笔,则为在目标设备上下文中选择的画笔。 目标坐标将根据目标设备上下文进行转换;源坐标将根据源设备上下文进行转换。

如果目标位图、源位图和模式位图没有相同的颜色格式,StretchBlt 将转换源位图和模式位图,以与目标位图匹配。 在转换中将使用目标设备上下文的前景色和背景色。

如果 StretchBlt 必须将单色位图转换为彩色,则会将白色位 (1) 设置为背景色,黑色位 (0) 设置为前景色。 若要将彩色位图转换为单色,它会将与背景色匹配的像素设置为白色 (1),其他所有像素设置为黑色 (0)。 在转换中将使用彩色设备上下文的前景色和背景色。

不是所有的设备都支持 StretchBlt 函数。 若要确定设备是否支持 StretchBlt,请调用带有 RASTERCAPS 索引的 GetDeviceCaps 成员函数并检查 RC_STRETCHBLT 标志的返回值。

要求

标头: afxwin.h

请参见

参考

CDC 类

层次结构图

CDC::BitBlt

CDC::GetDeviceCaps

CDC::SetStretchBltMode

StretchBlt