从屏幕捕获 Visual Basic RBG [英] Visual Basic RBG Capture from Screen

查看:87
本文介绍了从屏幕捕获 Visual Basic RBG的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要能够在 Visual Basic 中运行的代码来捕获屏幕并将其转换为像素值的 RBG 数组 - 需要非常快.

I am needing code that will run in visual basic to capture the screen and convert it to a RBG array of pixel values - needs to be quite fast.

有什么帮助吗?

推荐答案

此代码将从窗口或整个桌面(虚拟屏幕)捕获屏幕截图并将其绘制到自定义图片框.

This code will capture a screenshot from a window or the entire desktop (virtual screen) and draw it to a custom picturebox.

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long

Private Const SM_XVIRTUALSCREEN = 76
Private Const SM_YVIRTUALSCREEN = 77
Private Const SM_CYVIRTUALSCREEN = 79
Private Const SM_CXVIRTUALSCREEN = 78

Private Sub GetScreenshot(Optional ByVal hWnd As Long = 0)
Dim hDC As Long

Dim WindowRect As RECT
Dim Left As Long
Dim Top As Long
Dim Width As Long
Dim Height As Long

  If hWnd = 0 Then
    'Get the DC of the desktop
    hDC = GetWindowDC(GetDesktopWindow)

    'Get the virtual screen coordinates (this handles multiple monitors too :)
    Left = GetSystemMetrics(SM_XVIRTUALSCREEN)
    Top = GetSystemMetrics(SM_YVIRTUALSCREEN)
    Width = GetSystemMetrics(SM_CXVIRTUALSCREEN)
    Height = GetSystemMetrics(SM_CYVIRTUALSCREEN)

  Else
    'Get the DC of the window we want to capture
    hDC = GetWindowDC(hWnd)

    'Get the window coordinates
    GetWindowRect hWnd, WindowRect
    Left = 0
    Top = 0
    Width = WindowRect.Right - WindowRect.Left
    Height = WindowRect.Bottom - WindowRect.Top

  End If

  'BitBlt into our own DC
  BitBlt picScreen.hDC, 0, 0, Width, Height, hDC, Left, Top, vbSrcCopy

  'Delete our reference to the windows's DC
  ReleaseDC hWnd, hDC
End Function

注意在捕获桌面时使用 GetSystemMetrics().这允许它在使用多个显示器而不是 只是主监视器.

Note the use of GetSystemMetrics() when capturing the desktop. This allows it to get the full virtual screen screen dimensions when multiple monitors are in use instead of just the primary monitor.

这篇关于从屏幕捕获 Visual Basic RBG的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆