bitblt(bitblt透明)
VB.NET中的BitBlt 问题
可能这是我见过的最成功VBnet的BITBLT示例。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.PictureBox1.Image = Image.FromFile("E:\程序语言\VBpic\输入文件名.BMP")
End Sub
运行,点击你的Button2按钮(窗体Form1上加两个图片框和一个命令按钮搞成Button2)
PictureBox2就有受控的图片出来了。
求助,关于CDC:BitBlt的使用
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函数怎么用啊?
bitblt:
该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
用法参数:
hDestDC:指向目标设备环境的句柄。
x:指定目标矩形区域左上角的X轴逻辑坐标。
y:指定目标矩形区域左上角的Y轴逻辑坐标。
nWidth:指定源在目标矩形区域的逻辑宽度。
nHeight:指定源在目标矩形区域的逻辑高度。
hSrcDC:指向源设备环境的句柄。
xSrc:指定源矩形区域左上角的X轴逻辑坐标。
ySrc:指定源矩形区域左上角的Y轴逻辑坐标。
dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。
下面列出了一些常见的光栅操作代码:
BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。
DSTINVERT:表示使目标矩形区域颜色取反。
MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。
MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。
NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。
PATCOPY:将特定的模式拷贝到目标位图上。
PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。
SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。
SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。
SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。
SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。
WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。
dwRop Values
From wingdi.h:
#define BLACKNESS 0x42
#define DSTINVERT 0x550009
#define MERGECOPY 0xC000CA
#define MERGEPAINT 0xBB0226
#define NOTSRCCOPY 0x330008
#define NOTSRCERASE 0x1100A6
#define PATCOPY 0xF00021
#define PATINVERT 0x5A0049
#define PATPAINT 0xFB0A09
#define SRCAND 0x8800C6
#define SRCCOPY 0xCC0020
#define SRCERASE 0x440328
#define SRCINVERT 0x660046
#define SRCPAINT 0xEE0086
#define WHITENESS 0xFF0062
关于C++中BitBlt()函数的问题。
参照msdn给出的关于CDC::BitBlt
的解释BOOL
BitBlt(
int
x, int
y, int
nWidth,
int
nHeight,
CDC*
pSrcDC,
int
xSrc,
//指定原位图要绘制的左上角x坐标
int
ySrc,
//指定原位图要绘制的左上角y坐标 DWORD
dwRop
//绘制方式:你用的是srccopy直接绘制 );例如原图为200*200注意中间的分割线如下代码pDC-BitBlt(0,0,200,200,dcMemory,0,-100,SRCCOPY);
pDC-BitBlt(0,0,200,200,dcMemory,0,100,SRCCOPY);运行结果:也就是说pDC-BitBlt(0,0,200,200,dcMemory,0,-100,SRCCOPY);的显示效果为:pDC-BitBlt(0,0,200,200,dcMemory,0,100,SRCCOPY);的显示效果为:他们拼接的效果即为: