问题
我目前正在尝试创建一个应用程序,该应用程序将在用户复制计算机上的问题时创建gif /视频(尚未决定)。这显然意味着我需要通过定时器定期创建屏幕截图。
问题在于,25秒后(总是25秒),我会收到一个错误消息,提示系统内存不足。
Exception thrown: 'System.OutOfMemoryException' in System.Drawing.dll
Additional information: Out of memory.
我的代码
下面是计时器Tick事件中的代码:
Private DebugVid As New List(Of IntPtr)
Private Sub tmrDebug_Tick(sender As Object, e As EventArgs) Handles tmrDebug.Tick
Dim CurrentScreen As Screen = Screen.PrimaryScreen
For Each SCR As Screen In Screen.AllScreens
If SCR.Bounds.Contains(MousePosition) Then
CurrentScreen = SCR
End If
Next
Using ScreenGrab As New Bitmap(CurrentScreen.Bounds.Width, CurrentScreen.Bounds.Height)
Using g As Graphics = Graphics.FromImage(ScreenGrab)
g.CopyFromScreen(New Point(CurrentScreen.Bounds.X, CurrentScreen.Bounds.Y), New Point(0, 0), ScreenGrab.Size)
g.DrawImage(My.Resources.MyCursor, New Point(MousePosition.X - CurrentScreen.Bounds.X, MousePosition.Y))
End Using
DebugVid.Add(ScreenGrab.GetHbitmap())
End Using
GC.Collect()
End Sub
第一部分定义了光标所在的屏幕,以便知道要创建哪个屏幕的位图。
第二部分创建了位图,将屏幕截图应用于它,绘制了鼠标位置处的光标,最后将整数指针存储在列表中。
一旦用户点击停止录制按钮,它就会转换为gif(目前是这样)。
代码中引发异常的部分是以下行:
DebugVid.Add(ScreenGrab.GetHbitmap())
非常感谢您的帮助。