vb.net - 没有 Ram 不断增加的屏幕截图 - 使用后处理对象
问题描述
我有一个 VB.Net 应用程序,它有一个带有按钮和图片框的表单。当我单击按钮时,它会截取笔记本电脑屏幕的屏幕截图,添加光标,将其加载到 PictureBox 并将其保存为 JPG 文件。
这可以按预期工作,但是每次单击按钮时 RAM 都会增加,并且不会释放单击按钮使用的任何 RAM。我相信这是由于位图对象在使用后没有被处理掉。但是我不确定如何做到这一点。我已经尝试过诸如PictureBox1.Dispose()
最后的事情。
我还发现一些文章建议Dim graph as graphics
我应该Graphics
使用声明来声明对象,而不是Using
,如:Using graph as Graphics
。
但是,这对我也不起作用。
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'THIS PART TAKES A SCREENSHOT
Dim area As Rectangle
Dim graph As Graphics
area = Screen.PrimaryScreen.Bounds
captured = New System.Drawing.Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
graph = Graphics.FromImage(captured)
graph.CopyFromScreen(area.X, area.Y, 0, 0, area.Size, CopyPixelOperation.SourceCopy)
'HERE WE INSERT THE MOUSE CURSOR
Cursor.Draw(graph, New Rectangle(New Point(Cursor.Position.X - Cursor.HotSpot.X, Cursor.Position.Y - Cursor.HotSpot.Y), Cursor.Size))
'AND WE PUT THE PICTURE IN A PICTUREBOX
PictureBox1.Image = captured
PictureBox1.Image.Save("C:\temp\screenshot.jpg")
End Sub
在完成最后一行代码的屏幕截图保存后,任何关于如何运行并释放所有 RAM 的想法都将不胜感激。
解决方案
试试这个方法
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'THIS PART TAKES A SCREENSHOT
Dim path As String
path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
path = IO.Path.Combine(path, "screenshot.jpg")
If PictureBox1.Image IsNot Nothing Then PictureBox1.Image.Dispose()
Dim area As Rectangle
Using captured As Drawing.Bitmap = New System.Drawing.Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Using graph As Graphics = Graphics.FromImage(captured)
area = Screen.PrimaryScreen.Bounds
graph.CopyFromScreen(area.X, area.Y, 0, 0, area.Size, CopyPixelOperation.SourceCopy)
Cursor.Draw(graph, New Rectangle(New Point(Cursor.Position.X - Cursor.HotSpot.X, Cursor.Position.Y - Cursor.HotSpot.Y), Cursor.Size))
captured.Save(path, Drawing.Imaging.ImageFormat.Jpeg)
PictureBox1.Image = Image.FromFile(path)
End Using
End Using
End Sub
推荐阅读
- c# - UWP C# 单选按钮事件 CheckedChanged
- r - 将多个相同变量的数组计算为一个R中的变量?
- angular - Angular 9 - Routes
- python - 在 Visual Studio 代码中调试 scikit-learn GridSearchCV 时出现 TypeError
- javascript - 将嵌套路由渲染为 VueJS 中的单个页面
- visual-studio - 以下元素缺少测试用例对象
- node.js - 为什么我在尝试获取后端时会出现此错误?
- r - R Impute DataTable 模式和小鼠
- r - 基于 selectInput() 的数据集子集始终提供具有相同行数的数据集
- node.js - 如何获取位置与输入位置匹配的用户