使用 RenderTargetBitmap 的注意事项:
1. 要渲染的Canvas元素要放在Border元素内,并且此Border元素不能设置边框宽度(BorderThickness),不然生成的位图会出现错误。
2. Canvas的背景默认为null,需显式设置为白色
3. 如果需要边框效果,可再加一层Border或其它元素。
例:
cs:
RenderTargetBitmap bmp = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96, 96, PixelFormats.Pbgra32); bmp.Render(canvas); // string file = @"D:xxx.jpg"; string Extension = System.IO.Path.GetExtension(file).ToLower(); BitmapEncoder encoder = new JpegBitmapEncoder(); //可设置其它格式的位图编码器 encoder.Frames.Add(BitmapFrame.Create(bmp)); using (Stream stm = File.Create(file)) { encoder.Save(stm); }
xaml:例1
<Border BorderBrush="Black" BorderThickness="10" Width="300" Height="300" Grid.Row="1"> <Border> <Canvas x:Name="canvas" Background="White"> <Image Source="96x96-2.jpg" Canvas.Left="96" Canvas.Top="96"></Image> </Canvas> </Border> </Border>
xaml:例2
<Canvas x:Name="canvasBounds" Width="320" Height="320" Grid.Row="1"> <Canvas.Background> <DrawingBrush Viewport="0,0,8,8" ViewportUnits="Absolute" Stretch="None" TileMode="Tile"> <DrawingBrush.Drawing> <GeometryDrawing> <GeometryDrawing.Geometry> <LineGeometry StartPoint="8,0" EndPoint="0,8"></LineGeometry> </GeometryDrawing.Geometry> <GeometryDrawing.Pen> <Pen Brush="Black"/> </GeometryDrawing.Pen> </GeometryDrawing> </DrawingBrush.Drawing> </DrawingBrush> </Canvas.Background> <Border Width="300" Height="300" Canvas.Left="10" Canvas.Top="10"> <Canvas x:Name="canvas" Background="White"> <Image Source="96x96-2.jpg" Canvas.Left="96" Canvas.Top="96"></Image> </Canvas> </Border> </Canvas>