Windows应用开发有很多场景需要动态获取控件显示的图像,即控件转图片,用于其它界面的显示、传输图片数据流、保存为本地图片等用途。
下面分别介绍下一些实现方式以及主要使用场景
RenderTargetBitmap
控件转图片BitmapImage/BitmapSource,在WPF中可以使用RenderTargetBitmap获取捕获控件的图像。
下面我们展示下简单快速的获取控件图片:
1 private void CaptureButton_OnClick(object sender, RoutedEventArgs e) 2 { 3 var dpi = GetAppStartDpi(); 4 var bitmapSource = ToImageSource(Grid1, Grid1.RenderSize, dpi.X, dpi.Y); 5 CaptureImage.Source = bitmapSource; 6 } 7 /// <summary> 8 /// Visual转图片 9 /// </summary> 10 public static BitmapSource ToImageSource(Visual visual, Size size, double dpiX, double dpiY) 11 { 12 var validSize = size.Width > 0 && size.Height > 0; 13 if (!validSize) throw new ArgumentException($"{nameof(size)}值无效:${size.Width},${size.Height}"); 14 if (Math.Abs(size.Width) > 0.0001 && Math.Abs(size.Height) > 0.0001) 15 { 16 RenderTargetBitmap bitmap = new RenderTargetBitmap((int)(size.Width * dpiX), (int)(size.Height * dpiY), dpiX * 96, dpiY * 96, PixelFormats.Pbgra32); 17 bitmap.Render(visual); 18 return bitmap; 19 } 20 return new BitmapImage(); 21 }
07-26 17:10