前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WPF 从 DrawingVisual 转 BitmapImage 图片

WPF 从 DrawingVisual 转 BitmapImage 图片

作者头像
林德熙
发布于 2019-03-13 06:29:01
发布于 2019-03-13 06:29:01
1.3K02
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:2
代码可运行

有一些库的设计是需要传入一个 BitmapImage 图片,但是我需要从界面代码创建图片,我没有文件,如何通过 DrawingVisual 画出的控件转换 BitmapImage 传给库? 需要将 DrawingVisual 转为 RenderTargetBitmap 然后将 RenderTargetBitmap 转为 BitmapImage 才可以

先创建一个 DrawingVisual 在里面绘制一些内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                DrawingVisual drawingVisual = new DrawingVisual();
                DrawingContext drawingContext = drawingVisual.RenderOpen();

                // 画出界面
                
                drawingContext.Close();

如在里面写文字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                DrawingVisual drawingVisual = new DrawingVisual();
                DrawingContext drawingContext = drawingVisual.RenderOpen();

                drawingContext.DrawText(new FormattedText("欢迎访问我博客 http://lindexi.gitee.io 里面有大量 UWP WPF 博客",
                    CultureInfo.GetCultureInfo("zh-cn"),
                    FlowDirection.LeftToRight,
                    new Typeface("Verdana"),
                    36, System.Windows.Media.Brushes.Black),
                    new System.Windows.Point(200, 116));
                
                drawingContext.Close();

写完之后可以将他转换为 RenderTargetBitmap 请看代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                  RenderTargetBitmap bmp = new RenderTargetBitmap(宽度, 高度, 96, 96, PixelFormats.Pbgra32);
                bmp.Render(drawingVisual);

需要自己知道截图的宽度和高度才可以,另外这里的 96 是 dpi 的大小

将 DrawingVisual 转 RenderTargetBitmap 就可以通过 PngBitmapEncoder 将 RenderTargetBitmap 转图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                var bitmapImage = new BitmapImage();
                var bitmapEncoder = new PngBitmapEncoder();
                bitmapEncoder.Frames.Add(BitmapFrame.Create(bmp));

                using (var stream = new MemoryStream())
                {
                    bitmapEncoder.Save(stream);
                    stream.Seek(0, SeekOrigin.Begin);

                    bitmapImage.BeginInit();
                    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                    bitmapImage.StreamSource = stream;
                    bitmapImage.EndInit();
                }

通过这个方法就可以将 DrawingVisual 转 BitmapImage 虽然这个方法的速度比较慢

WPF 通过 DrawingContext DrawImage 绘制图片


本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/WPF-%E4%BB%8E-DrawingVisual-%E8%BD%AC-BitmapImage-%E5%9B%BE%E7%89%87.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WPF 从 DrawingVisual 转 BitmapImage 图片
有一些库的设计是需要传入一个 BitmapImage 图片,但是我需要从界面代码创建图片,我没有文件,如何通过 DrawingVisual 画出的控件转换 BitmapImage 传给库? 需要将 DrawingVisual 转为 RenderTargetBitmap 然后将 RenderTargetBitmap 转为 BitmapImage 才可以
林德熙
2022/08/04
4370
WPF 通过 DrawingContext DrawImage 绘制图片 裁剪图片
本文告诉大家如何通过 DrawingContext 绘制图片,同时指定绘制图片在画布的某个区域和绘制出来的图片大小,如何裁剪图片
林德熙
2019/03/13
2.9K0
WPF 通过 DrawingContext DrawImage 绘制图片
            裁剪图片
WPF中加载本地图片推荐方式
因为这样加载一方面图片的内存释放会有问题,容易导致内存泄漏,另一方面,被加载的图片就会处于占用状态,如果此时我们要处理图片比如压缩上传,就会因占用而报错。
码客说
2023/11/05
6550
WPF 使用不安全代码快速从数组转 WriteableBitmap
先来说下以前的方法,以前使用的是 BitmapSource ,这个方法是大法官方提供的。
林德熙
2018/09/19
9970
WPF 使用不安全代码快速从数组转 WriteableBitmap
WPF 如何在 WriteableBitmap 写文字 截图win form 方法
最近看到WPF 使用不安全代码快速从数组转 WriteableBitmap 可以快速从数组转 WriteableBitmap 所以就让他画一些元素,但是发现元素有文字就没法了。 本文告诉大家如何在 WriteableBitmap 把文字画上去。
林德熙
2019/03/13
6590
WPF桌面端开发-音视频录制、获取缩略图(使用OpenCvSharp)
音视频分开录制,音频如果麦克风和扬声器都录制的话,也要分开录制,最后再合并所有的流。
码客说
2023/07/11
1.7K0
WPF 通过 EXIF 设置和读取图片的旋转信息
本文将告诉大家如何在 WPF 里面设置图片的 EXIF 信息,包括如何设置图片的旋转信息,以及如何读取 EXIF 的内容
林德熙
2023/04/07
8590
WPF 通过 EXIF 设置和读取图片的旋转信息
WPF实现基础控件之托盘的示例代码分享
using System.Windows.Controls.Primitives;
用户7718188
2022/11/06
7600
WPF 通过位处理合并图片 读取图片读取图片像素合并两张图片界面
本文告诉大家,在使用 WPF 合并两张图片的处理,可以使用像素之间的与或和异或的方式,对三个颜色的通道进行处理。
林德熙
2019/03/13
2.4K0
WPF 通过位处理合并图片
            读取图片读取图片像素合并两张图片界面
wpf绘图性能分析
添加10000个图形节点大约1-2s,10w个图形需要5-6s,还是很慢,绘制的时候会调用gpu,但效率没提升多少,使用drawvisual还有一个问题是内存很高。
sofu456
2022/10/31
1K0
wpf绘图性能分析
WPF DrawingVisual
为何需要学这个?如果需要画出图形,对性能有要求,或者需要了解WPF如何画图,就需要知道这个。
林德熙
2018/09/19
1.5K0
WPF DrawingVisual
WPF 跨线程 UI 的方法
本文告诉大家如何在 WPF 使用多线程的 UI 的方法 在很多的时候都是使用单线程的 UI 但是有时候需要做到一个线程完全处理一个耗时的界面就需要将这个线程作为另一个 UI 线程
林德熙
2019/03/13
1.8K0
WPF 跨线程 UI 的方法
WPF 使用 RenderTargetBitmap 快速截图出现 COMException 提示
本文告诉大家一个最简单步骤让 RenderTargetBitmap 出现 COMException 提示
林德熙
2019/03/13
1.6K0
WPF 修改图片颜色
在 WPF 可以使用很多图片处理的方法,本文告诉大家的是一个图片处理,可以把处理的图片保存在文件。
林德熙
2018/09/19
3.4K0
WPF 修改图片颜色
win10 uwp 读取保存WriteableBitmap 、BitmapImage 保存 WriteableBitmap 到文件从文件读 WriteableBitmapIma
我们在UWP,经常使用的图片,数据结构就是 BitmapImage 和 WriteableBitmap。关于 BitmapImage 和 WriteableBitmap 区别,我就不在这里说。主要说的是 BitmapImage 和 WriteableBitmap 、二进制 byte 的互转。
林德熙
2018/09/18
2K0
win10 uwp 读取保存WriteableBitmap 、BitmapImage
            保存 WriteableBitmap 到文件从文件读 WriteableBitmapIma
dotnet 读 WPF 源代码笔记 渲染收集是如何触发
在 WPF 里面,渲染可以从架构上划分为两层。上层是 WPF 框架的 OnRender 之类的函数,作用是收集应用程序渲染的命令。上层将收集到的应用程序绘制渲染的命令传给下层,下层是 WPF 的 GFX 层,作用是根据收到的渲染的命令绘制出界面。本文所聊的是渲染上层部分,在 WPF 框架是如何做到界面刷新渲染,包括此调用的顺序以及框架逻辑
林德熙
2021/09/18
8440
dotnet 读 WPF 源代码笔记 渲染收集是如何触发
win10 uwp 存放网络图片到本地 下载图片保存图片从本地打开所有代码Nuget安装Microsoft.Toolkit.Uwp
有时候我们的网络很垃圾,我的的UWP要在第一次打开网络图片,就把图片存放到本地,下次可以从本地打开。 有时候用户使用的是流量网络,不能每次都联网下载。 我们不得在应用存放用户打开的图片。 这就是先把图片下载,然后显示出来,存放到本地,接着下次要使用就可以从本地获取。 最好这个和我们用户是透明,我们不知道图片在哪,是本地还是网络,只要给一个Uri就有一个图片。
林德熙
2019/03/13
1.3K0
WPF桌面端开发5-常用技巧
我们在开发截屏的功能时如果设置了缩放与布局为200%,显示分辨率为2560x1600,
码客说
2020/05/09
9010
WPF 文字描边
在WPF如果需要写入描边需要使用 FormattedText 将文字转换为 Geometry 然后通过画出 Geometry 的边框和填充画出描边
林德熙
2019/03/13
1.1K0
WPF 文字描边
WPF 从文件创建图片的方法
如果直接通过文件的 URL 创建,那么可能出现文件被占用的问题,不能比较好做文件的修改,建议通过内存的方式加载
林德熙
2019/03/13
1.4K0
推荐阅读
相关推荐
WPF 从 DrawingVisual 转 BitmapImage 图片
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验