【WPF】大量Canvas转换为本地图片遇到的问题
- 2019 年 10 月 3 日
- 笔记
?????https://www.cnblogs.com/younShieh/p/11279420.html
?
??
?????????????????????????Canvas???????????
??????????Canvas?????????????????????????????
?
???????
??????????????????????????????????BitmapSource????????PngBitmapEncoder() ???????????
//path????? using (FileStream outStream = new FileStream(path, FileMode.Create)) { PngBitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); encoder.Save(outStream); }
?
Canvas???
?? ????????????????????????Canvas???Bitmap??RenderTargetBitmap() ???????Visual???????????Canvas????Visual?????????????????????????????
RenderTargetBitmap bitmap = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96, 96, PixelFormats.Pbgra32); bitmap.Render(canvas);
?
Canvas?????
??????????????????Canvas??????????ActualWidth?ActualHeight???????0??????????????????????????????????????ActualWidth?ActualHeight??????MSDN????
???????????????????????
????????????????????????????????????Width???????????
??ActualWidth???????????????????????????????????????????????????????????????????
?
??MSDN?????????????????????????????ActualWidth?ActualHeight???????????????????????????Canvas??????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????Measure() ???Arrange() ???Canvas????????????????????????????????????????????????????????????????
canvas.Measure(new Size(300, 300)); canvas.Arrange(new Rect(new Size(300,300)));
?
?????
??1. ????????????????Cancas????????????????????????????????????Canvas??????????????????????~??????????????????? ???????????????????????????? GC.Collect(); Dispose(); using()?????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????Measure() ???Arrange() ?????????????????????????
?
??2. ?????????????????????????????????????????????????????????RenderTargetBitmap() ? ????????????????????????????????????????????????????Arrange() ???????????????????????????????????????????
?
??3. baidu?google?????MSDN?stackoverflow???????????????????????????????????????????????????????????????????????Canvas ?????Dispose() ?????????????Dispose()???????IDisposable?”????????????????Canvas?????Dispose() ????????????????Arrange() ??? Dispose() ???????Canvas???Arrage?????? InvalidateArrange() ???
?????????????? ?????????????????????????????????? System.Windows.UIElement.UpdateLayout?????
?????????????????????????????????????????????????????“???????”???????????????????????????????????~~~
??????
canvas.Measure(new System.Windows.Size(1920, 1080)); canvas.Arrange(new Rect(0, 0, 1920, 1080)); renderBitmap.Render(canvas); canvas.InvalidateArrange(); canvas.InvalidateMeasure(); canvas.UpdateLayout();
?
??????????????????????????????????????
?????