CDC:BitBlt
boolbitblt(intx、inty、intnWidth、intnHeight、CDC*pSrcDC、intxSrc、intySrc、DWORDdwRop );
返回值:函数成功。 返回非零值。 否则为0。
参数: x指定目标矩形左上角的逻辑x坐标。
y指定目标矩形左上角的逻辑y坐标。
nWidth指定目标矩形和源位图的宽度(逻辑单位)。
nHeight指定目标矩形和源位图的高度(逻辑单位)。
指向标识要复制的位图的设备上下文的pSrcDC对象的指针。 如果dwRop指定不包含源的光栅操作,则必须为NULL。
xSrc指定源位图左上角的逻辑x坐标。
ySrc指定源位图左上角的逻辑y坐标。
dwRop指定要执行的光栅操作。 光栅动作代码定义了GDC如何合并输出操作的颜色,包括当前画笔、可用源位图和目标位图。
dwRop中光栅操作代码及其说明如下所示。
BLACKNESS的所有输出都将变为黑色。
DSTINVERT将反转目标位图。
MERGECOPY使用xxdmdAND操作与源位图匹配并匹配特性。
MERGEPAINT使用xxdmdOR操作与源位图匹配,并匹配特性。
NOTSRCCOPY副本将源位图翻转到目标。
NOTSRCERASE使用xxdmdOR操作反转源位图和目标位图匹配的结果。
PATCOPY将特性复制到目标位图中。
PATINVERT使用xxdmdXOR操作来匹配和目标位图和特性。
PATPAINT使用xxdmdOR操作匹配并反转源位图和要素。 在xxdmdOR操作中匹配,操作结果与目标位图匹配。
SRCAND使用xxdmdAND操作将像素与源位图匹配并将其作为目标。
SRCCOPY将源位图复制到目标位图。
SRCERASE反转目标位图,使其在xxdmdAND操作中匹配,然后将结果与源位图匹配。
SRCINVERT使用xxdmdXOR操作将像素与源位图匹配并将其作为目标。
SRCPAINT使用xxdmdOR操作将像素与源位图匹配并将其作为目标。
WHITENESS的所有输出都将变为白色。
说明:
从源设备上下文中复制位图到此当前设备上下文。
所述APP应用可以在字节边界上对齐窗口或客户区域,以确保BitBlt操作发生在字节对齐的矩形中。 (注册窗口类时设置设备CS_BYTEALLGNWINDOW或CS_BYTEALIGHCLIENT标记。)。
字节对齐矩形中的BitBlt操作比非字节对齐矩形中的BitBlt操作快得多。 如果要在自己的设备上下文中指定字节对齐类样式,则必须注册窗口类,而不依赖于Microsoft基本类。 可以使用全局函数AfxRegisterWndClass。
使用目标设备上下文和源设备上下文时,GDI会对nWidth和nHeight进行变形。 如果结果扩展不匹配,GDI将根据需要使用WindowsStretchBlt函数压缩或扩展源位图。
如果目标、源和要素位图的颜色格式不同,BitBlt将转换源和要素位图以匹配目标。 中转换目标位图的前景颜色和背景颜色。
将单色位图转换为颜色时,BitBlt函数将白色(1)设置为背景颜色,黑色)设置为前景颜色。 使用目标设备上下文的背景和前景色。 若要将颜色转换为单色,BitBlt会将与背景颜色匹配的像素设置为白色,并将所有剩馀像素设置为黑色。 在颜色到单色转换中,BitBlt使用颜色设备上下文的前景和背景颜色。
请注意,并非所有设备上下文都支持BitBlt。 要检查特定设备上下文是否支持BitBlt,请使用GetDeviceCaps成员函数并指定RASTERCAPS索引。
CDC:StretchBlt
BOOLstretchblt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,intnSrcWidth,intnSrcHeight,Dworrd
返回值:例如
果位图已经绘制,则返回非零值,否则为0。
参数: x 目标矩形左上角的X逻辑坐标。
y 目标矩形左上角的Y逻辑坐标。
nWidth 目标矩形的宽度(逻辑单位)。
nHeight 目标矩形的高度(逻辑单位)。
pSrcDC 指定源设备上下文。
xSrc 源矩形左上角的X逻辑坐标。
ySrc 源矩形左上角的Y逻辑坐标。
nSrcWidth 源矩形的宽度(逻辑单位)。
nSrcHeight 源矩形的高度(逻辑单位)。
dwRop 指定光栅操作。
光栅操作模式说明了GDI是如何组合输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。可以为下列值之一: · BLACKNESS 将所有输出变为黑色。
· DSTINBERT 反转目标位图颜色。
· MERGECOPY 使用AND运算符组合模板与源位图的颜色。
· MERGEPAINT 使用OR运算符组合源位图的反色与目标矩形的颜色。
· NOTSRCCOPY 将源位图的反色拷贝到目标矩形中。
· NOTSRCERASE 反转使用OR运算符组合源位图与目标矩形后得到的颜色。
· PATCOPY 将模板颜色拷贝到目标矩形中。
· PATINVERT 使用XOR运算符组合目标矩形与模板颜色。
· PATPAINT 使用OR运算符组合模板与源位图的反色。再使用OR运算符将该操作结果与目标矩形组合。
· SRCAND 使用AND运算符组合源位图和目标位图的像素。
· SRCCOPY 将源位图拷贝到目标位图。
· SRCERASE 反转目标矩形的颜色,再使用AND运算符将该结果与源位图组合。
· SRCINVERT 使用XOR运算符组合源位图和目标位图的像素。
· SRCPAINT 使用OR运算符组合源位图和目标位图的像素。
· WHITENESS 使所有输出变成白色。
说明:
将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图使其与目标矩形尺寸吻合。函数使用目标设备上下文(由SetStretchBltMode设置)的扩展模式来决定如何扩展或压缩位图。StretchBlt函数将pSrcDC源设备中的位图移动到目标矩形,该矩形用成员函数正在调用的设备上下文来表示。xSrc,ySrc,nSrcWidth和nSrcHeight 参数定义了源矩形的左上角和尺寸。x,yc,nWidth和nHeight参数定义了目标矩形的左上角和尺寸。dwRop指定的光栅操作模式说明了源位图与目标设备上已经存在的位图是如何组合的。如果nSrcWidth和nWidth或nSrcHeight和nHeight的符号不同,StretchBlt将为位图创建一个镜像。如果nSrcWidth和nWidth符号不同,函数沿X轴创建镜像。如果nSrcHeight和nHeight符号不同,函数沿Y轴创建镜像。StretchBlt函数在内存中对源位图进行扩展或压缩,然后将结果拷贝到目标矩形中。如果模板要与结果组合,则在扩展后的位图拷贝到目标矩形后才组合。如果用到画刷,应使用目标设备上下文中选定的画刷。目标坐标根据目标设备上下文来转换,源坐标根据源设备上下文来转换。如果目标位图、源位图和模板位图的格式不一致,StretchBlt使模板与源位图匹配模板位图格式,转换中会使用到目标设备上下文中的前景色和背景色。如果要将黑白位图转换为彩色位图,它将背景色设置为白位(1),前景色设置为黑位(0)。如果要将彩色位图转换为黑白位图,函数设置与背景色匹配的像素为白(1),其它像素为黑(0),用到了带颜色的设备上下文中的前景色和背景色。不是所有的设备都支持StretchBlt函数。调用带RASTERCAPS索引的GetDeviceCaps 函数来决定是否支持StretchBlt。并检验为返回给RC_STRETCHBLT标记的值。
BitBlt 是位块传送,
BitBlt( HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);
从源dc的 nXSrc,nYSrc坐标开始,拷贝图像数据到目的dc的 nXDest,nYDest 坐标处,拷贝宽度和长度是 nWidth, nHeight;,如果原dc的范围达不到nWidth,nHeight的范围,那部分数据不处理。
StretchBlt是拉伸图像拷贝。参数中比bitblt多了, nWidthSrc, nHeightSrc,源dc的高度和宽度。这个是映射模式,从源dc的,nXOriginSrc,nYOrignSrc映射到目标dc的nXOriginDest, nYOriginDest。源dc的范围和目标dc的范围执行拉伸隐射。可以看成一个空间几何的四棱椎台体。从一个截面映射到另外一个截面。如果2个截面面积相等,那就是1对1的数据拷贝,如果不是,就按照比例计算拟合数据。
这个需要 SetStretchBltMode 设置拉伸拷贝的数据复合模式。也就是数据拟合的计算方法。
相同的参数 DWORD dwRop 表示光栅计算模式,从源数据-》目标数据的复合,比如拷贝、按位与或等二进制运算。简单说,bitblt直接按你指定的大小输出源dc到目标dc,而strechblt会调整你源dc大小,使之适应你所指定的目标dc大小,再输出。也就是说,strechblt输出的图总是完整的,而且充满你指定的目标DC区域,而bitblt则可能输出的图是不完整的,也可能无法充满目标dc制定区域