使用 RenderTargetBitmap 的注意事项:

1. 要渲染的Canvas元素要放在Border元素内,并且此Border元素不能设置边框宽度(BorderThickness),不然生成的位图会出现错误。

2. Canvas的背景默认为null,需显式设置为白色

3. 如果需要边框效果,可再加一层Border或其它元素。

例:

cs:

            RenderTargetBitmap bmp = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, , , 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>

WPF Canvas转换为位图 (RenderTargetBitmap)的更多相关文章

  1. WPF技巧-Canvas转为位图

    转自:http://www.cnblogs.com/tmywu/archive/2010/09/14/1825650.html 在WPF中我们可以将Canvas当成一种画布,将Canvas中的控件当成 ...

  2. Canvas动画 位图缓存提高效率和对应的内存问题

    对一个矢量图动画,开启位图缓存能大大提高运行效率.所谓开启位图缓存,其实要自己动手,先创建一个临时canvas,然后把矢量图绘制到这个canvas上,到了实际绘制时,直接把这个临时canvas拷贝到真 ...

  3. Canvas转换为Blob对象并使用Ajax发送

    Canvas转换为Blob对象并使用Ajax发送 转换为Blob对象后,可以使用Ajax上传图像文件. 先从canvas获取dataurl, 再将dataurl转换为Blob对象 var dataur ...

  4. WPF Canvas实现进度条

    原文:WPF Canvas实现进度条 先看效果图: 思路: 一个Canvas做背景,一个Canvas用来显示进度,图片放在显示进度的Canvas中,靠右设置为图片本身宽度一半的距离,视觉上实现以图片中 ...

  5. 【WPF】大量Canvas转换为本地图片遇到的问题

    原文地址:https://www.cnblogs.com/younShieh   项目中遇到一个难题,需要将上百个没有显示出来的Canvas存储为图片保存在本地. 查阅资料后(百度一下)后得知保存为本 ...

  6. WPF Canvas 画区域

    有时候需要实现类似于QQ截图那样的选择区域功能,这里的区域可以是一条线,圆,矩形等等 实现原理就是一个Canvas做蒙板,然后canvas的三个事件,MouseLeftButtonDown,Mouse ...

  7. WPF canvas设置旋转角度和偏移位置

    /// <summary> /// 设置旋转角度和位置 /// </summary> /// <param name="Angle">角度< ...

  8. WPF Canvas

    Canvas为容器控件,用于定位. 1.基本应用 <Border HorizontalAlignment="Left" VerticalAlignment="Top ...

  9. WPF Canvas小例子

    源码下载:DraggingElementsInCanvas_demo.rar

随机推荐

  1. VS调试程序时,程序出现异常,但VS不报错的解决方案

    在调试>异常> 里面把勾全勾上就行了!

  2. HDU 6397(2018多校第8场1001) Character Encoding 容斥

    听了杜教的直播后知道了怎么做,有两种方法,一种构造函数(现在太菜了,听不懂,以后再补),一种容斥原理. 知识补充1:若x1,x2,.....xn均大于等于0,则x1+x2+...+xn=k的方案数是C ...

  3. php get_include_path();是干嘛的、??还有set_include_path();/?????

    首先 我们来看这个全局变量:__FILE__ 它表示文件的完整路径(当然包括文件名在内) 也就是说它根据你文件所在的目录不同,有着不同的值:当然,当它用在包行文件中的时候,它的值是包含的路径: 然后: ...

  4. CentOS7:ifconfig command not found解决和netstat -an

    没有 ifconfig 和netstat -an 的话安装 net-tools package yum install net-tools

  5. Jsp入门第一天

    1. JSP: 1). WHY: JSP 是简 Servlet 编写的一种技术, 它将 Java 代码和 HTML 语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用 Java 代码来编写, ...

  6. C++的运算符重载 (转)

      C++中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作.这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特 ...

  7. php+mysql入门

    mysql+php+apache可以快速的架构动态网站. 首先,为什么php容易搞mysql,因为与mysql交互成为了php语言的一种特性. 一.mysql入门 mysql是一种开源的关系型数据库. ...

  8. 简单的linux service(linux服务)编写,运行示例

    1.写一个简单小程序 #include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) { while(1 ...

  9. javascript使用ajax方式

    ajax请回和回应实例: function showContent(type) { //create obj var xmlhttp; if (window.XMLHttpRequest) { //c ...

  10. CodeSmith链接MySQL

    环境:Win7 x64 旗舰版 CodeSmith Generator Professional 6.5.0 MySQL 5.6.17 x64 在CodeSmith中按一般步骤创建数据库连接 Data ...