代码之家  ›  专栏  ›  技术社区  ›  Nordic_1

CopyFromScreen适用于32位Win10计算机,但不适用于64位

  •  0
  • Nordic_1  · 技术社区  · 8 年前

    我在Win10 32位机器上开发了这段代码。我在面板上放了一些图形,pnlFull。然后复制pnlFull的内容并将其保存为磁盘上的bmp文件。调试/发布/任何计算机/32位/64位都可以在32位机器上正常工作。发布32位/64位/任何计算机都不能在64位机器上正常工作。在64位计算机上,副本的原点位于pnlFull之外。根据我的表格在屏幕上的位置,副本的来源甚至在表格之外。我非常感谢任何帮助。

    Private Sub Capture_Preset()
        Using tmpImg as New Bitmap(pnlFull.Width, pnlFull.Height)
        Using g as Graphics = Graphics.FromImage(tmpImg)
        g.CopyFromScreen(pnlFull.PointToScreen(New Point(0, 0)), New Point(0, 0), New Size(pnlFull.Width, pnlFull.Height))
        End using
        tmpImg.Save("C:\ProgramData\Paedia\DiablocData\PresetImg(" & PresetNumber & ").bmp", Imaging.ImageFormat.Bmp)
        End using
    End Sub
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Visual Vincent    8 年前

    我想 Control.DrawToBitmap() 是你需要的。它将使控件将自己绘制到您选择的位图上:

    Using tmpImg as New Bitmap(pnlFull.Width, pnlFull.Height)
        pnlFull.DrawToBitmap(tmpImg, New Rectangle(New Point(0, 0), tmpImg.Size))
        tmpImg.Save("C:\ProgramData\Paedia\DiablocData\PresetImg(" & PresetNumber & ").bmp", Imaging.ImageFormat.Bmp)
    End Using