{"id":21557292,"url":"https://github.com/sweeticelolly/vb6-memorydc","last_synced_at":"2026-01-04T00:31:07.065Z","repository":{"id":159225876,"uuid":"173330095","full_name":"SweetIceLolly/VB6-MemoryDC","owner":"SweetIceLolly","description":"A memory DC class written in VB6","archived":false,"fork":false,"pushed_at":"2019-05-18T15:47:58.000Z","size":50,"stargazers_count":9,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-24T10:46:49.642Z","etag":null,"topics":["graphics","graphics-programming","vb6","vb6-source","visual-basic-6","visualbasic6"],"latest_commit_sha":null,"homepage":null,"language":"Visual Basic","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SweetIceLolly.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-01T16:01:48.000Z","updated_at":"2022-11-02T05:37:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"9efd7252-3247-4795-a8ac-4f0e092ba82a","html_url":"https://github.com/SweetIceLolly/VB6-MemoryDC","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SweetIceLolly%2FVB6-MemoryDC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SweetIceLolly%2FVB6-MemoryDC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SweetIceLolly%2FVB6-MemoryDC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SweetIceLolly%2FVB6-MemoryDC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SweetIceLolly","download_url":"https://codeload.github.com/SweetIceLolly/VB6-MemoryDC/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244148530,"owners_count":20406198,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["graphics","graphics-programming","vb6","vb6-source","visual-basic-6","visualbasic6"],"created_at":"2024-11-24T08:11:53.876Z","updated_at":"2026-01-04T00:31:07.036Z","avatar_url":"https://github.com/SweetIceLolly.png","language":"Visual Basic","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VB6 MemoryDC\n [English Version](README_EN.md)\n\n一个VB6编写的内存图类，让你可以更简单的操作内存图。\n\n# 使用方法\n\n## 初始化内存图类\n\n声明一个 MemoryDC 类型的变量，只需要\n```VBS\nDim memDC As New clsMemDC\n```\n\n接着，在使用内存图前创建它:\n```VBS\nmemDC.CreateMemDC image_width，image_height\n```\n对于函数 `CreateMemDC`，请参考“函数说明”部分中对于它的描述。\n\n## 删除内存图类\n\n当你不再需要内存图类的时候，只需要\n```VBS\nmemDC.DeleteMemDC\nSet memDC = Nothing\n```\n\n## 从其它的DC绘图过来\n\n从其他的DC绘制图像过来，只需要\n```VBS\nmemDC.BitBltFrom YourDC, FromX, FromY, ToX, ToY, image_width, image_height\n```\n\n对于函数 `BitBltFrom`，请参考“函数说明”部分中对于它的描述。\n\n## 绘图到其他的DC\n\n从内存图绘制图像到其他DC，只需要\n```VBS\nmemDC.BitBltTo YourDC, ToX, ToY, FromX, FromY, image_width, image_height\n```\n\n对于函数 `BitBltTo`，请参考“函数说明”部分中对于它的描述。\n\n## 复制字节数据到Byte数组\n\n把内存图的数据复制到一个Byte数组里，只需要\n```VBS\nmemDC.CopyDataTo data     'data 是一个 Byte() 类型的数组变量\n```\n\n对于函数 `CopyDataTo`，请参考“函数说明”部分中对于它的描述。\n\n## 从Byte数组复制字节数据到内存图像\n\n把Byte数组中的数据复制到内存图像，只需要\n```VBS\nmemDC.CopyDataFrom data     'data 是一个 Byte() 类型的数组变量\n```\n\n对于函数 `CopyDataFrom`，请参考“函数说明”部分中对于它的描述。\n\n## 其他功能请参考下面的部分。\n\n# 函数说明\n\n## `CreateMemDC` 函数\n\n`CreateMemDC` 函数先设置内存图像的属性（宽度，高度，颜色位数），再创建它。\n\n### 定义\n\n```VBS\nPublic Function CreateMemDC(ByVal iWidth As Long, ByVal iHeight As Long, _\n    Optional ByVal iBitCount As Integer = 16, Optional ByVal FromHdc As Long = 0) As Boolean\n```\n\n### 参数\n\n`iWidth`: Long, 需要创建的内存图像的宽度。\n\n`iHeight`: Long, 需要创建的内存图像的高度。\n\n`iBitCount`: 可选的, Integer, 需要创建的内存图像的颜色位数。默认是16位。\n\n`FromHdc`: 可选的, Long, 源DC句柄。默认为0。\n\n### 返回值\n\n类型: `Boolean`\n\n如果内存图像成功创建，则函数返回`True`。否则，函数返回`False`。\n\n### 例子\n\n```VBS\nmemDC.CreateMemDC 1920, 1080      '创建一个 1920 * 1080 的内存图像\n```\n\n```VBS\nmemDC.CreateMemDC 1920, 1080, 8   '创建一个 1920 * 1080，8位 的内存图像\n```\n\n```VBS\nmemDC.CreateMemDC 1920, 1080, , frmMain.hDC   '从frmMain.hDC 创建一个 1920 * 1080 的内存图像\n```\n\n**注意：当您使用 `CreateMemDC` 函数的时候，这个函数会首先自动删除掉之前创建的内存图像**\n\n## `DeleteMemDC` 函数\n\n`DeleteMemDC` 函数可以删掉创建的内存图像。\n\n### 定义\n\n```VBS\nPublic Sub DeleteMemDC()\n```\n\n### 例子\n\n```VBS\nmemDC.DeleteMemDC\n```\n\n**注意：当您不再需要内存图像的时候应调用这个函数。当类被销毁的时候，这个函数会自动调用。**\n\n## `BitBltFrom` 函数\n\n`BitBltFrom` 函数可以从其他DC绘制图像到内存图里。\n\n### 定义\n\n```VBS\nPublic Function BitBltFrom(FromHdc As Long, FromX As Long, FromY As Long, _\n    ToX As Long, ToY As Long, iWidth As Long, iHeight As Long, _\n    Optional DrawMode As RasterOpConstants = vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS) As Boolean\n```\n### 参数\n\n`FromHdc`: Long, 指定来源图像的DC句柄。\n\n`FromX`: Long, 原图像的X位置。\n\n`FromY`: Long, 原图像的Y位置。\n\n`ToX`: Long, 目标图像的X位置。\n\n`ToY`: Long, 目标图像的Y位置。\n\n`iWidth`: Long, 需要绘制的图像的宽度。\n\n`iHeight`: Long, 需要绘制的图像的高度。\n\n`DrawMode`: 可选的, RasterOpConstants, 指定绘图的模式。 默认是 `vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS`。 绘图模式可以使以下常数的组合:\n\n| RasterOpConstants |\n|-------------------|\n| vbDstInvert       |\n| vbMergeCopy       |\n| vbMergePaint      |\n| vbNotSrcCopy      |\n| vbNotSrcErase     |\n| vbPatCopy         |\n| vbPatInvert       |\n| vbPatPaint        |\n| vbSrcAnd          |\n| vbSrcCopy         |\n| vbSrcErase        |\n| vbSrcInvert       |\n| vbSrcPaint        |\n\n### 返回值\n\n类型: `Boolean`\n\n如果图像成功绘制，则函数返回`True`。否则，函数返回`False`。\n\n### 例子\n\n```VBS\nmemDC.BitBltFrom frmMain.hDC, 0, 0, 0, 0, 100, 100      '从 frmMain.hDC 句柄, 窗体的(0, 0)绘制到内存图像的(0, 0)，大小为 100 * 100\n```\n\n```VBS\nmemDC.BitBltFrom GetDC(0), 100, 200, 150, 250, 300, 400, vbSrcInvert      '从屏幕DC句柄，屏幕的(100, 200)绘制到内存图像的(150, 250)，大小为 300 * 400，使用 vbSrcInvert 绘图模式\n```\n\n## `BitBltTo` 函数\n\n`BitBltTo` 函数可以从内存图绘制图像到其他DC里。\n\n### 定义\n\n```VBS\nPublic Function BitBltTo(ToHdc As Long, ToX As Long, ToY As Long, _\n    FromX As Long, FromY As Long, iWidth As Long, iHeight As Long, _\n    Optional DrawMode As RasterOpConstants = vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS) As Boolean\n```\n### 参数\n\n`ToHdc`: Long, 指定绘画图像的目标DC句柄。\n\n`ToX`: Long, 目标图像的X位置。\n\n`ToY`: Long, 目标图像的Y位置。\n\n`FromX`: Long, 原图像的X位置。\n\n`FromY`: Long, 原图像的Y位置。\n\n`iWidth`: Long, 需要绘制的图像的宽度。\n\n`iHeight`: Long, 需要绘制的图像的高度。\n\n`DrawMode`: 可选的，RasterOpConstants，指定绘图的模式。 默认是 `vbSrcCopy Or BITBLT_TRANSPARENT_WINDOWS`。对于DrawMode可用的常数值，请参考\"`BitBltFrom` 函数\"部分。\n\n### 返回值\n\n类型: `Boolean`\n\n如果图像成功绘制，则函数返回`True`。否则，函数返回`False`。\n\n### 例子\n\n```VBS\nmemDC.BitBltTo frmMain.hDC, 0, 0, 0, 0, 100, 100      '绘制图像到 frmMain.hDC 句柄，从内存图像的(0, 0)绘制到窗体的(0, 0)，大小为 100 * 100\n```\n\n```VBS\nmemDC.BitBltTo GetDC(0), 100, 200, 150, 250, 300, 400, vbSrcInvert      '绘制图像到屏幕DC句柄，从内存图像的(100, 200)绘制到屏幕的(150, 250) ，大小为 300 * 400, 使用 vbSrcInvert 绘图模式\n```\n\n## `CopyDataFrom` 函数\n\n`CopyDataFrom` 函数从Byte数组复制数据到内存图像。\n\n### 定义\n\n```VBS\nPublic Sub CopyDataFrom(FromArray() As Byte)\n```\n\n### 参数\n\n`FromArray`: Byte(), 指定一个Byte数组作为复制数据的来源。\n\n### 例子\n\n```VBS\nmemDC.CopyDataFrom data         '从 data 复制图像数据，其中 data 是一个 Byte 数组\n```\n\n**注意: `CopyDataFrom` 复制整个数组的数据到内存图像的数据区里。因此，它会检查数组的大小是否大于内存图像的数据区大小。如果内存图像的数据区比数组的大小要小，那么这个函数只会复制等同于数据区大小的数据。例如，如果数组大小是10字节，内存图像数据区大小是5字节，那么这个函数只会从数组复制5字节的数据。**\n\n## `CopyDataTo` 函数\n\n`CopyDataTo` 函数从内存图像的数据区复制数据到Byte数组里。\n\n### 定义\n\n```VBS\nPublic Function CopyDataTo(ToArray() As Byte) As Boolean\n```\n\n### 参数\n\n`ToArray`: Byte(), 指定一个数组作为复制数据的目标。\n\n### 返回值\n\n类型: `Boolean`\n\n如果数据成功复制，那么函数返回 `True`。否则，函数返回`False`。\n\n### 例子\n\n```VBS\nmemDC.CopyDataTo data         '复制图像数据到 data 里，其中 data 是一个 Byte 数组\n```\n\n**注意: `CopyDataTo` 函数会复制所有内存图像的数据区里的数据到数组中。因此，它会检查数组大小是否足够存储内存图像的数据。如果内存图像的数据区大小比数组大，这个函数会失败。例如，如果数组的大小是5字节，内存图像的数据区大小是10字节，这个函数会返回`False`**\n\n# 属性说明\n\n`iWidth`: Long, 内存图像的宽度。\n\n`iHeight`: Long, 内存图像的高度。\n\n`iBitCount`: Long, 内存图像的颜色位数。\n\n`iImageSize`: Long, 内存图像的数据区大小。\n\n`hDC`: Long, 内存图像的DC句柄。\n\n`hBmp`: Long, 内存图像的位图句柄。该位图与内存DC一同创建。\n\n`lpBitData`: Long, 内存图像的数据区地址。\n\n# 开源协议\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsweeticelolly%2Fvb6-memorydc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsweeticelolly%2Fvb6-memorydc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsweeticelolly%2Fvb6-memorydc/lists"}