首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#将BitmapSource转换为BitmapImage

我正在尝试编写一个将BitmapSource转换为BitmapImage的函数。我找到这样做的唯一方法是创建一个临时bmp文件,从该文件中写入和读取以创建一个新的BitmapImage。在尝试删除该文件或重新使用该函数之前,此操作很好。在释放BitmapImage之前,存在一些文件处理错误,在这些错误中文件仍将被使用。

1-是否有更好的方法将BitmapSource转换为BitmapImages?

2-在不释放BitmapImage的情况下,我能做些什么来返回它?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public BitmapImage ConvertSourceToBitMapImage(BitmapSource bitmapSource)
{
    BitmapImage bmi = null;
    try
    {
        string filePath = @"C:\GitRepository\ReceiptAPP\ReceiptApplication\bin\Debug\testing.bmp";
        using (var fileStream = new FileStream(filePath, FileMode.Create))
        {
            BitmapEncoder encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
            encoder.Save(fileStream);
            fileStream.Close();
        }
        Uri path = new Uri(filePath);
        bmi = new BitmapImage(path);
        File.Delete(filePath);
    }
    catch(Exception ex)
    {
    }
    return bmi;
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-29 06:26:01

与文件相比,MemoryStream的编码和解码效率要高得多。

但是,请注意,没有将BitmapSource转换为BitmapImage的用例。BitmapSource可以直接用作图像元素的Source或ImageBrush的ImageSource从不显式地需要一个BitmapImage。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static BitmapImage ConvertBitmapSourceToBitmapImage(
    BitmapSource bitmapSource)
{
    // before encoding/decoding, check if bitmapSource is already a BitmapImage

    if (!(bitmapSource is BitmapImage bitmapImage))
    {
        bitmapImage = new BitmapImage();

        BmpBitmapEncoder encoder = new BmpBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmapSource));

        using (MemoryStream memoryStream = new MemoryStream())
        {
            encoder.Save(memoryStream);
            memoryStream.Position = 0;

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

    return bitmapImage;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70156160

复制
相关文章
WPF图片处理相关
GDI在全称是Graphics Device Interface,即图形设备接口。是图形显示与实际物理设备之间的桥梁。
码客说
2020/08/12
3.7K0
WPF 从 DrawingVisual 转 BitmapImage 图片
有一些库的设计是需要传入一个 BitmapImage 图片,但是我需要从界面代码创建图片,我没有文件,如何通过 DrawingVisual 画出的控件转换 BitmapImage 传给库? 需要将 DrawingVisual 转为 RenderTargetBitmap 然后将 RenderTargetBitmap 转为 BitmapImage 才可以
林德熙
2019/03/13
1.3K0
WPF 从 DrawingVisual 转 BitmapImage 图片
有一些库的设计是需要传入一个 BitmapImage 图片,但是我需要从界面代码创建图片,我没有文件,如何通过 DrawingVisual 画出的控件转换 BitmapImage 传给库? 需要将 DrawingVisual 转为 RenderTargetBitmap 然后将 RenderTargetBitmap 转为 BitmapImage 才可以
林德熙
2022/08/04
4280
silverlight中如何将BitmapImage转化为Stream或byte数组?
上一篇"base64编码在silverlight中的使用"里已经提到WriteableBitmap对象可以借助FluxJpeg转化为base64字符串,而WriteableBitmap又能从BitmapSource直接构造,so ... 问题解决了 先将BitmapImage转化为WriteableBitmap,然后得到base64字符串,然后可以得到base64的byte[]数组,再然后您可以把byte[]变成Stream 关键代码: Code highlighting produced by Actip
菩提树下的杨过
2018/01/23
1K0
C#将汉字转换为拼音
明志德道
2023/10/21
2890
C#将汉字转换为拼音
wpf绘图性能分析
添加10000个图形节点大约1-2s,10w个图形需要5-6s,还是很慢,绘制的时候会调用gpu,但效率没提升多少,使用drawvisual还有一个问题是内存很高。
sofu456
2022/10/31
1K0
wpf绘图性能分析
C#/.NET 如何获取一个异常(Exception)的关键特征,用来判断两个异常是否表示同一个异常
在 .NET / C# 程序中出现异常是很常见的事情,程序出现异常后记录日志或者收集到统一的地方可以便于分析程序中各种各样此前未知的问题。但是,有些异常表示的是同一个异常,只是因为参数不同、状态不同、用户的语言环境不同就分开成多个异常的话,分析起来会有些麻烦。
walterlv
2023/10/22
6890
WPF桌面端开发5-常用技巧
我们在开发截屏的功能时如果设置了缩放与布局为200%,显示分辨率为2560x1600,
码客说
2020/05/09
8920
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.5K0
C#将枚举转换为List集合
using System.ComponentModel; namespace ABenNetCore.FriendException.Helper { public class EnumItem { public string Code { get; set; } public int Value { get; set; } public string Descprtion { get; set; } } public cla
跟着阿笨一起玩NET
2022/09/19
1.1K0
WPF实现基础控件之托盘的示例代码分享
using System.Windows.Controls.Primitives;
用户7718188
2022/11/06
7420
使用Azure人脸API对图片进行人脸识别
人脸识别是人工智能机器学习比较成熟的一个领域。人脸识别已经应用到了很多生产场景。比如生物认证,人脸考勤,人流监控等场景。对于很多中小功能由于技术门槛问题很难自己实现人脸识别的算法。Azure人脸API对人脸识别机器学习算法进行封装提供REST API跟SDK方便用户进行自定义开发。
MJ.Zhou
2020/08/11
2K0
使用Azure人脸API对图片进行人脸识别
Birdge.NET:将C#代码转换为JavaScript
Birdge.NET 是一个可以将C#代码转换为JavaScript的开源编译器,由 Object.NET于2015年5月推出。它允许开发者使用C#编写平台独立的移动、Web和桌面应用,并运行在iOS、Windows、Mac、Linux及其它任意支持JavaScript的设备上。 Birdge.NET的最新版本是 2015年8月17日发布的1.8版本 。该版本的一项特性是 支持多平台操作系统 。这一特性可以让 Birdge.NET 本身运行在多个平台上。目前,Birdge.NET可以运行在Windows、L
逸鹏
2018/04/09
3.3K0
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.3K0
C#/.NET 如何在第一次机会异常 FirstChanceException 中获取比较完整的异常堆栈
在 FirstChangeException 事件中,我们通常只能拿到异常堆栈的第一帧,这对于我们捕捉到异常是好的,但对分析第一次机会异常可能并不利。
walterlv
2023/10/22
3990
dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 后台线程创建 WriteableBitmap 锁住主线程
在 WPF 中,如果在没有开启 Dispatcher 的后台线程里面创建 WriteableBitmap 对象,在 WriteableBitmap 构造函数传入在主线程创建的 BitmapSource 也许就会锁住主线程。本文将通过 WPF 框架源代码告诉大家为什么会锁住主线程
林德熙
2021/04/19
5820
WPF 使用不安全代码快速从数组转 WriteableBitmap
先来说下以前的方法,以前使用的是 BitmapSource ,这个方法是大法官方提供的。
林德熙
2018/09/19
9800
WPF 使用不安全代码快速从数组转 WriteableBitmap
c# 将字符串转换为指定类型的值
private object GetValueByProperty(string key, string value, ref Type typeValue) { Type t = typeof(T); var property = t.GetProperty(key); if (property == null) { return value;
冰封一夏
2019/09/11
3.2K0
WPF内存优化
下载地址: https://pan.baidu.com/s/1nLF6njntaVgrXVdIaT1mOw 提取码: phsy
码客说
2020/08/19
1.6K0
WPF 修改图片颜色
在 WPF 可以使用很多图片处理的方法,本文告诉大家的是一个图片处理,可以把处理的图片保存在文件。
林德熙
2022/08/04
1.4K0

相似问题

将BitmapSource转换为BitmapImage的更快方法

11

BitmapSource到BitmapImage

21

无法将Bitmapsource保存到Bitmapimage

14

通过Powershell将BitmapSource转换为BitmapImage (或Base64)

221

如何从BitmapSource获得BitmapImage?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文