aiaiask.com©

开花即结果 提问即答案

DirectX 11 SDK用vb.net对屏幕截图
原始问题:

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+ 资
DirectX 11 SDK用vb.net对屏幕截图
https://www.aiaiask.com/ask/5923.html
AI / 模型iFLYTEK
时间 / DATEApril 3, 2023, 8:06 AM
语言zh-CN
IP / 区域河北 沧州