如何实现可保留格式的自定义位图捕获?解决Bitmap文本变色、4K缩放截图裁切异常
WinForm窗体捕获相关问题
出现的两类异常
- 捕获后文本颜色属性丢失:一直使用Bitmap捕获主窗体并保存为JPEG格式,但Bitmap无法保留文本的原有颜色属性。具体表现为主窗体内的ObjectListView控件中,有一列文本原本为红色,经过Bitmap捕获后,该列文本全部显示为黑色,两种效果的对比如下:
- 主窗体实际显示效果:

- Bitmap捕获得到的效果:

- 主窗体实际显示效果:
- 现有方案不适配高缩放场景:曾尝试通过全屏捕获、裁切出主窗体区域的方法替代原有捕获逻辑,该方法在1080p分辨率的显示器上运行正常,但在开启200%系统缩放的4K显示器上,会出现捕获图像被不当裁切的问题。
当前使用的捕获代码
public void SaveControlImage(Form form) { string path_and_file = "C:\1.png"; Bitmap controlBitMap = new Bitmap(form.Width, form.Height); Graphics g = Graphics.FromImage(controlBitMap); g.CopyFromScreen(PointToScreen(form.Location), new Point(0, 0), form.Size); // 示例:将捕获的窗体图像保存到指定路径 controlBitMap.Save(path_and_file, System.Drawing.Imaging.ImageFormat.Png); }
待解决的诉求
- 排查Bitmap捕获时文本原有颜色丢失的根本原因
- 寻找可替代的窗体捕获方法,兼容不同系统缩放比例下的捕获需求,避免出现图像裁切问题
内容的提问来源于stack exchange,提问作者Breakwin
相关产品推荐
相关产品推荐

