WPF Canvas转换为位图 (RenderTargetBitmap)

使用 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>

 

转载于:https://www.cnblogs.com/gmcn/p/6691296.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值