DirectX 11 SDK用vb.net对屏幕截图
Imports System.Runtime.InteropServices
Imports System.Drawing
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim bmpScreenshot As Bitmap = GetDesktopImage() '获取屏幕截图的Bitmap对象
bmpScreenshot.Save("C:\Users\Administrator\Desktop\test.jpg", Imaging.ImageFormat.Jpeg) '保存为jpg格式图片
End Sub
Public Function GetDesktopImage() As Bitmap
Dim hDeskDC As IntPtr = GetDC(IntPtr.Zero) ' 获取桌面设备上下文
Dim hSrceDC As IntPtr = CreateCompatibleDC(hDeskDC) ' 创建兼容的设备上下文环境,用于绘制位图
Dim iWidth As Integer = Screen.PrimaryScreen.Bounds.Width ' 获取屏幕宽度
Dim iHeight As Integer = Screen.PrimaryScreen.Bounds.Height ' 获取屏幕高度
Dim hDestBitmap As IntPtr = CreateCompatibleBitmap(hDeskDC, iWidth, iHeight) ' 创建一个兼容位图,用于保存截图内容
Dim hOldObject As IntPtr = SelectObject(hSrceDC, hDestBitmap) ' 选择兼容位图到设备上下文中,返回原来的对象句柄,以便之后恢复使用。
BitBlt(hSrceDC, 0, 0, iWidth, iHeight, hDeskDC, 0, 0, &HCC0020) ' 把当前内存中的位图复制到目标内存中。&HCC0020表示SRCCOPY操作。即将当前窗口的所有内容复制到目标窗口中。也就是将整个屏幕截圖出来。
SelectObject(hSrceDC, hOldObject) ' 恢复原来选择的对象,以便释放该对象占用的内存。此时已将截圖保存在兼容位国中,后面就是将该位国保存为一张jpg格式的文件了。
DeleteObject(hDestBitmap) ' 销毁不使用的对象,释放内存占用 ' 将元数据流Copy到Stream中去
Return System .Drawing . Image .FromHbitmap (hDestBitmap ) ''这里会生成GDI+ 图片 ''最后要注意释放GDI+ 资
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!