C# 从“byte[]”转换为“BitmapImage”

要从字节数组 (byte[]) 转换为 System.Windows.Media.Imaging.BitmapImage,你需要使用一个内存流 (MemoryStream) 来读取字节数组,并利用这个流来初始化 BitmapImage。以下是如何执行这一转换的详细步骤和代码示例:

将字节数组转换为 BitmapImage

using System.IO;
using System.Windows.Media.Imaging;public static BitmapImage ConvertByteArrayToBitmapImage(byte[] byteArray)
{if (byteArray == null || byteArray.Length == 0)return null;var bitmapImage = new BitmapImage();using (var memoryStream = new MemoryStream(byteArray)){memoryStream.Position = 0; // 确保流的起始位置是0bitmapImage.BeginInit();bitmapImage.CreateOptions = BitmapCreateOptions.PreservePixelFormat; // 保持原有像素格式bitmapImage.CacheOption = BitmapCacheOption.OnLoad; // 加载时就缓存全图像bitmapImage.UriSource = null;bitmapImage.StreamSource = memoryStream;bitmapImage.EndInit();}bitmapImage.Freeze(); // 冻结BitmapImage对象,使其不可修改,这对于多线程环境很重要return bitmapImage;
}

说明:

  1. 这个函数首先检查传入的字节数组是否为空或长度为0,如果是,则返回 null。
  2. 创建一个 BitmapImage 实例之后,使用 MemoryStream 来包装传入的字节数组。MemoryStream 作为一个临时的流,用于 BitmapImage 的初始化。
  3. 设置 memoryStream.Position = 0; 确保从流的开始处读取数据。
  4. 在调用 BeginInit() 方法之后,设置 BitmapImage 的一些属性。CreateOptions 设置为PreservePixelFormat 以保持原有的像素格式,CacheOption 设置为OnLoad,这意味着图像数据会在加载时立即被缓存。这是因为流在 EndInit 调用后会被关闭,所以需要在关闭前完成图像的加载。
  5. UriSource 被设置为 null,因为我们是从一个流而不是一个URI加载图像。
  6. StreamSource 属性被设置为我们的 MemoryStream 对象,这样 BitmapImage 就会从字节数组中加载图像数据。
  7. 调用 EndInit() 方法完成初始化。
  8. 最后,调用 Freeze() 方法冻结 BitmapImage 对象,使其变为不可变。这一步是可选的,但在多线程环境下是一个好的实践。

通过以上步骤,可以将一个字节数组转换为 System.Windows.Media.Imaging.BitmapImage,这样就可以在WPF应用程序中使用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比特币ETF广告战大爆发!

作者:秦晋 贝莱德主动发起广告攻势。 2月1日,据外媒Cryptoslate报道,贝莱德在提交给美国SEC的一份文件中显示,其提出一项在建筑物侧面投影比特币ETF广告计划。 据介绍,广告内容为:「IBIT」信号是一个以迈阿…

【Qt+MSVC2017_64bit +Cmake新建项目编译出错】

项目场景: 提示:这里简述项目相关背景: 项目新电脑环境配置 QtMSVC2017_64bit Cmake新建项目编译出错 问题描述 提示:这里描述项目中遇到的问题: QtMSVC2017_64bit Cmake新建项目编译出错 Running C:\Program Fil…

【数据分享】1米分辨率土地覆盖数据集SinoLC-1

数据链接 SinoLC-1: the first 1-meter resolution national-scale land-cover map of China created with the deep learning framework and open-access data (Update data: August, 2023) (zenodo.org)https://zenodo.org/records/8214467 数据分享 数据分享到了公众号&…

Android studio改代码运行不生效

Android studio改代码后运行不生效,尝试卸载apk后,运行能生效,后面尝试手动通过adb命令安装生成的apk能生效。 studio 版本 解决方案: 在File->Settings->Build, Execution, Deployment,找到Android Configura…

BFS——双向广搜+A—star

有时候从一个点能扩展出来的情况很多,这样几层之后搜索空间就很大了,我们采用从两端同时进行搜索的策略,压缩搜索空间。 190. 字串变换(190. 字串变换 - AcWing题库) 思路:这题因为变化规则很多,所以我们一层一层往外…

golang开源的可嵌入应用程序高性能的MQTT服务

golang开源的可嵌入应用程序高性能的MQTT服务 什么是MQTT? MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的消息传输协议,设计用于在低带宽、高延迟或不可靠的网络环境中进行通信。MQTT最初由IBM开发&#xf…

canvas设置图形各种混合模式,类似photoshop效果

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

一看就会《幻兽帕鲁》服务器自建指南

玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

jmeter设置定时器

前言 本文主要分享两种定时器(同步定时器、固定定时器)的用法,从作用,设置方法以及实例演示几个方面讲解,结尾还有小知识哦!一起开始学习吧! 一、同步定时器(集合点) …

DFS剪枝算法经典题目-挑选

4954. 挑选 - AcWing题库 给定一个包含 n 个正整数 a1,a2,…,an的集合。 集合中可能存在数值相同的元素。 请你从集合中挑选一些元素,要求同时满足以下所有条件: 被选中元素不少于 2 个。所有被选中元素之和不小于 l 且不大于 r。所有被选中元素之中最大…

Leetcode 3030. Find the Grid of Region Average

Leetcode 3030. Find the Grid of Region Average 1. 解题思路2. 代码实现 题目链接:3030. Find the Grid of Region Average 1. 解题思路 这一题我的思路上也没啥巧妙的,就是大力出奇迹,直接就是遍历所有3x3的区间,找到左右的…

Qt 项目树工程,拷贝子项目dll到子项目exe运行路径

1、项目树工程 2、项目树列表 ---- BuildAll -------- App (exe) -------- Database (dll) 注:使用 子项目–>添加库–>内部库 的方式 3、qmake 内置的变量 $$OUT_PWD 表示输出文件(如可执行文件…

[leetcode] 22. 括号生成

文章目录 题目描述解题方法方法一:dfs遍历java代码 方法二:按照卡特兰数的思路递归求出有效括号组合java代码 相似题目 题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示…

Nginx 介绍和使用

Nginx 介绍和使用 一、Nginx简介 Nginx是一款高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它具有轻量级、高并发处理能力、低资源消耗等优点,常被用于Web服务器、反向代理和负载均衡。Nginx通过事件驱动的方式进行设计&#xff0…

SQL注入其他方法

此次实验因为环境问题很多无法复现,在此只讨论过程和方法 一、SQL注入之outfile注入 mysql的outfile的作用是导出文件,使用此方法的必要条件:(此方法成功率极低) 1、知道目标网站的物理路径; 2、%secur…

sql升级更新解决方案

1.问题 随着项目版本的迭代,有时候需要更新数据库如修改字段、更新数据、删除数据等等,但是如果系统已经部署到生产环境了,让开发人员连接生产环境的数据库手动处理是不太实际的,生产环境数据库一般不允许外部连接,而…

便宜寄快递,就选闪侠惠递,帮您省钱!

随着电子商务的发展,物流也越来越发达,人们的生活中有很多地方都与物流快递打交道。网购或者给远方的亲戚朋友寄礼物等等都需要快递。有时候就止步于昂贵的快递的,其实选对方法,寄快递并不贵... 编辑 现在一般寄快递都是选择去菜鸟…

5分钟快速掌握 XML (Extensible Markup Language)

背景 在Java开发的过程中,我们经常需要和配置文件打交道,其中接触最多的就是XML。从最初学习 JavaWeb 时在 Tomcat 中配置servlet,到后来接触Spring框架并在XML中编写各种配置,XML一直是不可或缺的一部分。然而,XML的…

1-2 动手学深度学习v2-基础优化方法-笔记

最常见的算法——梯度下降 当一个模型没有显示解的时候,该怎么办呢? 首先挑选一个参数的随机初始值,可以随便在什么地方都没关系,然后记为 w 0 \pmb{w_{0}} w0​在接下来的时刻里面,我们不断的去更新 w 0 \pmb{w_{0}…