如何在WPF中保存清晰无模糊的高质量控件图像?
问题:RenderTargetBitmap导出大尺寸图像模糊
我正在使用DrawingContext绘制图像,随后将结果渲染至RenderTargetBitmap。图像在屏幕上显示清晰锐利,但保存后会变得模糊,即使在100%缩放比例下该问题仍然存在。有趣的是,当图像宽度小于2000px时导出正常,但宽度越大,导出的图像模糊程度越高。
代码示例
private void Window_Loaded(object sender, RoutedEventArgs e) { BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = new Uri(@"image-full-hd.png"); bitmap.EndInit(); img1.Source = bitmap; img1.Width = bitmap.Width; img1.Height= bitmap.Height; } private void btnExport_Click(object sender, RoutedEventArgs e) { var result = CaptureSnapshot(img1); Clipboard.SetImage(result); } public BitmapSource CaptureSnapshot(UIElement source) { var dpi = VisualTreeHelper.GetDpi(source); double dpiX = dpi.DpiScaleX, dpiY = dpi.DpiScaleY; double newImageWidth = source.RenderSize.Width * dpiX; double newImageHeight = source.RenderSize.Height * dpiY; RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)newImageWidth, (int)newImageHeight, 96, 96, PixelFormats.Pbgra32); DrawingVisual visual = new DrawingVisual(); using (DrawingContext context = visual.RenderOpen()) { VisualBrush sourceBrush1 = new VisualBrush(source) { Stretch = Stretch.None }; context.DrawRectangle(sourceBrush1, null, new Rect(source.RenderSize)); } System.Windows.Size s1size = new System.Windows.Size(newImageWidth, newImageHeight); source.Measure(s1size); source.Arrange(new Rect(s1size)); RenderOptions.SetEdgeMode(renderTarget, EdgeMode.Unspecified); RenderOptions.SetBitmapScalingMode(renderTarget, BitmapScalingMode.HighQuality); renderTarget.Render(visual); return renderTarget; }
截图展示
- 应用程序窗口:

- 宽度为3400px的导出图像局部:

内容的提问来源于stack exchange,提问作者Riz
相关产品推荐
相关产品推荐

