VB实现RichTextBox控件截图时捕获到窗体其他区域该如何解决
RichTextBox控件截图捕获区域错误修复方案
问题原因
RichTextBox2.Bounds返回的是控件相对于其父容器的相对坐标,而CopyFromScreen方法要求输入的起始坐标是屏幕绝对坐标,二者不匹配就会导致截图区域偏移,捕获到窗体其他部分内容。
修复方案
用PointToScreen方法把控件左上角的相对坐标转换为屏幕绝对坐标再传入即可,修正后的代码如下:
Dim memoryImage As Bitmap ' 先获取控件左上角的屏幕绝对坐标 Dim controlScreenPos As Point = RichTextBox2.PointToScreen(Point.Empty) Dim s As Size = RichTextBox2.Size memoryImage = New Bitmap(s.Width, s.Height) Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage) ' 传入转换后的屏幕坐标 memoryGraphics.CopyFromScreen(controlScreenPos.X, controlScreenPos.Y, 0, 0, s) memoryImage.Save(audiooutputfolder & name & ".png") ' 用完主动释放资源避免GDI资源泄漏 memoryGraphics.Dispose() memoryImage.Dispose()
额外优化说明
- 原代码里创建的
Me.CreateGraphics()对象实际没有用到,可以直接删除,避免不必要的资源占用 - 操作完成后主动释放
Graphics和Bitmap对象,避免长时间运行出现资源泄漏问题
内容的提问来源于stack exchange,提问作者Mehdi Esmaeili
相关产品推荐
相关产品推荐

