WPF 后台图片绘制线段并生成本地图片文件
来源:互联网 发布:360数据恢复软件比较差 编辑:程序博客网 时间:2024/05/17 23:59
奈何想法与现实相左,后台创建控件,其控件大小虽有设置,但其实际并没有宽高。因此生成出的图片文件是张黑色图片。因此,经过深入研究,引进了建立虚拟画布、并在其中画图的方式,来替换掉Canvas。
借此,将代码归纳总结如下:
//获取本地图片文件(单纯的调用uri会存在后续代码有文件被占用的隐患。在此做了间接转换,方便释放资源)
//BitmapImage lb = new BitmapImage();
//lb = new BitmapImage(new Uri("D:\\123.jpg", UriKind.Absolute));
BinaryReader binReader = new BinaryReader(File.Open("D:\\123.jpg", FileMode.Open));
FileInfo fileInfo = new FileInfo("D:\\123.jpg");
byte[] bytes = binReader.ReadBytes((int)fileInfo.Length);
binReader.Close();
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(bytes);
bitmap.EndInit();
Image Toimage = new Image();
Toimage.Source = bitmap.Clone();
#region 创建虚拟画布
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
//创建矩形区域
ImageBrush imgbrush = new ImageBrush();
imgbrush.ImageSource = Toimage.Source;
Rect rect = new Rect(new Point(0, 0), new Size(355, 288));
drawingContext.DrawRectangle(imgbrush, (Pen)null, rect);
//创建画笔
Pen pen = new Pen();
pen.Brush = new SolidColorBrush(Color.FromRgb(1,255,0));
pen.Thickness = 3;
//画线
drawingContext.DrawLine(pen, new Point(100,50), new Point(200,150));
drawingContext.DrawLine(pen, new Point(200, 150), new Point(300, 150));
drawingContext.DrawLine(pen, new Point(300, 150), new Point(100, 50));
drawingContext.Close();
#endregion
//截虚拟画布并生成为本地图片文件
RenderTargetBitmap bmp = new RenderTargetBitmap((int)355, (int)288, 96, 96, PixelFormats.Pbgra32);
bmp.Render(drawingVisual);
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);
}
- WPF 后台图片绘制线段并生成本地图片文件
- php获取本地图片文件并生成xml文件输出
- Java绘制图片并实现打印前生成图片文件进行预览
- WPF使用本地图片
- wpf绘制图片查看器
- FileReader:读取本地图片文件并显示
- FileReader:读取本地图片文件并显示
- FileReader:读取本地图片文件并显示
- FileReader:读取本地图片文件并显示
- FileReader:读取本地图片文件并显示
- 本地生成图片,xlsx,打包压缩,并删除本地文件夹
- iOS后台下载图片并实现本地通知(Swift)
- 【WPF】后台切换前台图片
- 浏览本地(客户端)图片,并生成预览
- 用html5的canvas生成图片并保存到本地
- 抓取网上图片,并生成缩略图存入本地
- js将html生成为图片,并保存在本地
- 绘制bitmap图片保存,生成ico文件或者对象
- JVM底层存储示意图
- IfFileExists(文件存在)+Goto实现简单跳转
- c# 利用ADODB连接ORACLE数据库
- C++——USACO Section 2.3 题解
- 一致性Hash算法
- WPF 后台图片绘制线段并生成本地图片文件
- Prime Ring Problem
- ch2 计算机的发展及应用
- Spark读文本将多行合并为一行
- QT5布局管理--停靠窗口QDock Widget
- Java中的多线程你只要看这一篇就够了
- hdu 5573 Binary Tree(传说中的构造)
- 安卓flex
- 2017七月、八月暑假集训总结