Graphics.CopyFromScreen создает пустое изображение - PullRequest
0 голосов
/ 19 сентября 2011

Я использую VB.NET, чтобы попытаться захватить часть экрана, поэтому я нашел этот код в нескольких местах, чтобы захватить весь экран:

Dim screenSize = SystemInformation.PrimaryMonitorSize
Dim bitmap = New Bitmap(screenSize.Width, screenSize.Height)
Using g As Graphics = Graphics.FromImage(bitmap)

    g.CopyFromScreen(New Point(0, 0), New Point(0, 0), screenSize)

End Using
bitmap.Save("c:\scratch\screenshot.png", System.Drawing.Imaging.ImageFormat.Png)

Это работает без выброса ошибок, и файл успешно создан, но получающееся изображение полностью прозрачно (это правильный размер) - что мне не хватает?

Этот вопрос относится к той же ошибке, но решение состоит в том, чтобы использовать Win32 GDI, которого я хочу избежать, если это возможно

1 Ответ

0 голосов
/ 20 сентября 2011

Я решил в конце выбрать вариант экрана печати из-за проблем с методом CopyFromScreen:

'declarations
Private Const VK_SNAPSHOT As Integer = &H2C

<DllImport("user32.dll")>
Public Function keybd_event(ByVal key As Integer, ByVal dummy As Integer, ByVal flags As Integer, ByVal info As IntPtr) As IntPtr
End Function


'Usage
Dim loopCount As Integer = 0

Clipboard.Clear()
keybd_event(VK_SNAPSHOT, 0, 0, IntPtr.Zero)
Application.DoEvents()

Do Until Clipboard.ContainsImage Or (loopCount > 10)
    loopCount += 1
    System.Threading.Thread.Sleep(100)
    Application.DoEvents()
Loop

If Clipboard.ContainsImage Then
    Return Clipboard.GetImage
Else
    Return Nothing
End If
...