【问题标题】:CopyFromScreen works on 32-bit Win10 computer but not 64-bitCopyFromScreen 适用于 32 位 Win10 计算机,但不适用于 64 位
【发布时间】:2017-05-03 21:17:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • @Nordic_1:很高兴听到!请按我帖子左侧的复选标记将此标记为已接受的答案。
    • 完成。非常感谢。
    猜你喜欢
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多