一个VB6编写的内存图类,让你可以更简单的操作内存图。
声明一个 MemoryDC 类型的变量,只需要
Dim memDC As New clsMemDC接着,在使用内存图前创建它:
memDC.CreateMemDC image_width,image_height对于函数 CreateMemDC,请参考“函数说明”部分中对于它的描述。
当你不再需要内存图类的时候,只需要
memDC.DeleteMemDC
Set memDC = Nothing从其他的DC绘制图像过来,只需要
memDC.BitBltFrom YourDC, FromX, FromY, ToX, ToY, image_width, image_height对于函数 BitBltFrom,请参考“函数说明”部分中对于它的描述。
从内存图绘制图像到其他DC,只需要
memDC.BitBltTo YourDC, ToX, ToY, FromX, FromY, image_width, image_height对于函数 BitBltTo,请参考“函数说明”部分中对于它的描述。
把内存图的数据复制到一个Byte数组里,只需要
memDC.CopyDataTo data 'data 是一个 Byte() 类型的数组变量对于函数 CopyDataTo,请参考“函数说明”部分中对于它的描述。
把Byte数组中的数据复制到内存图像,只需要
memDC.CopyDataFrom data 'data 是一个 Byte() 类型的数组变量对于函数 CopyDataFrom,请参考“函数说明”部分中对于它的描述。
CreateMemDC 函数先设置内存图像的属性(宽度,高度,颜色位数),再创建它。
Public Function CreateMemDC(ByVal iWidth As Long, ByVal iHeight As Long, _
Optional ByVal iBitCount As Integer = 16, Optional ByVal FromHdc As Long = 0) As BooleaniWidth: Long, 需要创建的内存图像的宽度。
iHeight: Long, 需要创建的内存图像的高度。
iBitCount: 可选的, Integer, 需要创建的内存图像的颜色位数。默认是16位。
FromHdc: 可选的, Long, 源DC句柄。默认为0。
类型: Boolean
如果内存图像成功创建,则函数返回True。否则,函数返回False。
memDC.CreateMemDC 1920, 1080 '创建一个 1920 * 1080 的内存图像memDC.CreateMemDC 1920, 1080, 8 '创建一个 1920 * 1080,8位 的内存图像memDC.CreateMemDC 1920, 1080, , frmMain.hDC '从frmMain.hDC 创建一个 1920 * 1080 的内存图像注意:当您使用 CreateMemDC 函数的时候,这个函数会首先自动删除掉之前创建的内存图像
DeleteMemDC 函数可以删掉创建的内存图像。
Public Sub DeleteMemDC()memDC.DeleteMemDC注意:当您不再需要内存图像的时候应调用这个函数。当类被销毁的时候,这个函数会自动调用。
BitBltFrom 函数可以从其他DC绘制图像到内存图里。
Public Function BitBltFrom(FromHdc As Long, FromX As Long, FromY As Long, _
ToX As Long, ToY As Long, iWidth As Long, iHeight As Long, _
Optional DrawMode As RasterOpConstants = vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS) As BooleanFromHdc: Long, 指定来源图像的DC句柄。
FromX: Long, 原图像的X位置。
FromY: Long, 原图像的Y位置。
ToX: Long, 目标图像的X位置。
ToY: Long, 目标图像的Y位置。
iWidth: Long, 需要绘制的图像的宽度。
iHeight: Long, 需要绘制的图像的高度。
DrawMode: 可选的, RasterOpConstants, 指定绘图的模式。 默认是 vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS。 绘图模式可以使以下常数的组合:
| RasterOpConstants |
|---|
| vbDstInvert |
| vbMergeCopy |
| vbMergePaint |
| vbNotSrcCopy |
| vbNotSrcErase |
| vbPatCopy |
| vbPatInvert |
| vbPatPaint |
| vbSrcAnd |
| vbSrcCopy |
| vbSrcErase |
| vbSrcInvert |
| vbSrcPaint |
类型: Boolean
如果图像成功绘制,则函数返回True。否则,函数返回False。
memDC.BitBltFrom frmMain.hDC, 0, 0, 0, 0, 100, 100 '从 frmMain.hDC 句柄, 窗体的(0, 0)绘制到内存图像的(0, 0),大小为 100 * 100memDC.BitBltFrom GetDC(0), 100, 200, 150, 250, 300, 400, vbSrcInvert '从屏幕DC句柄,屏幕的(100, 200)绘制到内存图像的(150, 250),大小为 300 * 400,使用 vbSrcInvert 绘图模式BitBltTo 函数可以从内存图绘制图像到其他DC里。
Public Function BitBltTo(ToHdc As Long, ToX As Long, ToY As Long, _
FromX As Long, FromY As Long, iWidth As Long, iHeight As Long, _
Optional DrawMode As RasterOpConstants = vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS) As BooleanToHdc: Long, 指定绘画图像的目标DC句柄。
ToX: Long, 目标图像的X位置。
ToY: Long, 目标图像的Y位置。
FromX: Long, 原图像的X位置。
FromY: Long, 原图像的Y位置。
iWidth: Long, 需要绘制的图像的宽度。
iHeight: Long, 需要绘制的图像的高度。
DrawMode: 可选的,RasterOpConstants,指定绘图的模式。 默认是 vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS。对于DrawMode可用的常数值,请参考"BitBltFrom 函数"部分。
类型: Boolean
如果图像成功绘制,则函数返回True。否则,函数返回False。
memDC.BitBltTo frmMain.hDC, 0, 0, 0, 0, 100, 100 '绘制图像到 frmMain.hDC 句柄,从内存图像的(0, 0)绘制到窗体的(0, 0),大小为 100 * 100memDC.BitBltTo GetDC(0), 100, 200, 150, 250, 300, 400, vbSrcInvert '绘制图像到屏幕DC句柄,从内存图像的(100, 200)绘制到屏幕的(150, 250) ,大小为 300 * 400, 使用 vbSrcInvert 绘图模式CopyDataFrom 函数从Byte数组复制数据到内存图像。
Public Sub CopyDataFrom(FromArray() As Byte)FromArray: Byte(), 指定一个Byte数组作为复制数据的来源。
memDC.CopyDataFrom data '从 data 复制图像数据,其中 data 是一个 Byte 数组注意: CopyDataFrom 复制整个数组的数据到内存图像的数据区里。因此,它会检查数组的大小是否大于内存图像的数据区大小。如果内存图像的数据区比数组的大小要小,那么这个函数只会复制等同于数据区大小的数据。例如,如果数组大小是10字节,内存图像数据区大小是5字节,那么这个函数只会从数组复制5字节的数据。
CopyDataTo 函数从内存图像的数据区复制数据到Byte数组里。
Public Function CopyDataTo(ToArray() As Byte) As BooleanToArray: Byte(), 指定一个数组作为复制数据的目标。
类型: Boolean
如果数据成功复制,那么函数返回 True。否则,函数返回False。
memDC.CopyDataTo data '复制图像数据到 data 里,其中 data 是一个 Byte 数组注意: CopyDataTo 函数会复制所有内存图像的数据区里的数据到数组中。因此,它会检查数组大小是否足够存储内存图像的数据。如果内存图像的数据区大小比数组大,这个函数会失败。例如,如果数组的大小是5字节,内存图像的数据区大小是10字节,这个函数会返回False
iWidth: Long, 内存图像的宽度。
iHeight: Long, 内存图像的高度。
iBitCount: Long, 内存图像的颜色位数。
iImageSize: Long, 内存图像的数据区大小。
hDC: Long, 内存图像的DC句柄。
hBmp: Long, 内存图像的位图句柄。该位图与内存DC一同创建。
lpBitData: Long, 内存图像的数据区地址。
MIT