本文介绍: 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; // 确保流的起始位置是0
bitmapImage.BeginInit();
bitmapImage.CreateOptions = BitmapCreateOptions.PreservePixelFormat; // 保持原有像素格式
bitmapImage.CacheOption = BitmapCacheOption.OnLoad; // 加载时就缓存全图像
bitmapImage.UriSource = null;
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();
}
bitmapImage.Freeze(); // 冻结BitmapImage对象,使其不可修改,这对于多线程环境很重要
return bitmapImage;
}
说明:
- 这个函数首先检查传入的字节数组是否为空或长度为0,如果是,则返回 null。
- 创建一个 BitmapImage 实例之后,使用 MemoryStream 来包装传入的字节数组。MemoryStream 作为一个临时的流,用于 BitmapImage 的初始化。
- 设置 memoryStream.Position = 0; 确保从流的开始处读取数据。
- 在调用 BeginInit() 方法之后,设置 BitmapImage 的一些属性。CreateOptions 设置为PreservePixelFormat 以保持原有的像素格式,CacheOption 设置为OnLoad,这意味着图像数据会在加载时立即被缓存。这是因为流在 EndInit 调用后会被关闭,所以需要在关闭前完成图像的加载。
- UriSource 被设置为 null,因为我们是从一个流而不是一个URI加载图像。
- StreamSource 属性被设置为我们的 MemoryStream 对象,这样 BitmapImage 就会从字节数组中加载图像数据。
- 调用 EndInit() 方法完成初始化。
- 最后,调用 Freeze() 方法冻结 BitmapImage 对象,使其变为不可变。这一步是可选的,但在多线程环境下是一个好的实践。
通过以上步骤,可以将一个字节数组转换为 System.Windows.Media.Imaging.BitmapImage,这样就可以在WPF应用程序中使用了。
原文地址:https://blog.csdn.net/qq_35320456/article/details/136004354
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_65783.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。