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

时间:2016-12-18 19:37:27

标签: .net vb.net winforms 32bit-64bit

我在Win10 32位机器上开发了这段代码。我把一些图形放到面板中,pnlFull。然后我复制pnlFull的内容并将它们保存为磁盘上的bmp文件。 Debug / Release / AnyComputer / 32位/ 64位在32位机器上都能正常工作。版本32位/ 64位/ AnyComputer无法在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 个答案:

答案 0 :(得分:0)

我认为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