WPF Image控件 Source: Byte[] ,BitmapImage 相互转换
时间: 2023-12-31 19:06:16 浏览: 164
可以使用以下代码将 WPF Image 控件的 Source 属性设置为 Byte[]:
```csharp
byte[] imageData = // 图片的二进制数据
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(imageData);
bitmap.EndInit();
imageControl.Source = bitmap;
```
反过来,可以使用以下代码将 BitmapImage 转换为 Byte[]:
```csharp
BitmapImage bitmap = // 图片的 BitmapImage
byte[] imageData;
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (MemoryStream ms = new MemoryStream())
{
encoder.Save(ms);
imageData = ms.ToArray();
}
```
注意,在将 BitmapImage 转换为 Byte[] 时,需要使用合适的编码器,例如上面的代码使用了 JpegBitmapEncoder。
相关问题
WPF中如何将byte[]转换为bitmapimage
在Windows Presentation Foundation (WPF)中,如果你想将`byte[]`数组转换成`BitmapImage`以便显示或存储图片,可以按照以下步骤操作:
1. 首先,创建一个`MemoryStream`并设置其源头为你的`byte[]`数组:
```csharp
byte[] imageData = ...; // 你的字节数组
MemoryStream memoryStream = new MemoryStream(imageData);
```
2. 然后,使用`MemoryStream`创建一个`BitmapDecoder`,它能从流中解码图像数据:
```csharp
using (BitmapDecoder decoder = BitmapDecoder.Create(memoryStream))
{
BitmapSource bitmapSource = decoder.Frames[0]; // 如果有多帧选择第一帧
Image image = new Image();
image.Source = bitmapSource;
}
```
或者
```csharp
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();
```
3. 最后,你可以将`BitmapImage`添加到WPF控件中,比如`Grid`, `Canvas`或`Image`元素中:
```csharp
Image imageControl = new Image();
imageControl.Width = bitmapSource.PixelWidth;
imageControl.Height = bitmapSource.PixelHeight;
imageControl.Source = bitmapImage;
// 将imageControl添加到视图树中
```
这样就实现了`byte[]`到`BitmapImage`的转换和显示。
WPF中,输入byte[]和图像宽高,将byte[]转为BitmapImage
在WPF(Windows Presentation Foundation)中,如果你有一个`byte[]`数组代表图像数据,并且你知道其宽度和高度,你可以通过以下步骤将其转换为`BitmapImage`:
1. 首先,创建一个新的`MemoryStream`,并将`byte[]`的数据写入其中:
```csharp
using System.IO;
MemoryStream ms = new MemoryStream(byteArray);
```
2. 然后,利用这个流实例化一个`BitmapSource`,通常选择`PngBitmapDecoder`如果图片是以PNG格式存储的,如果是其他格式如JPEG,可以使用对应的解码器(例如`JpegBitmapDecoder`):
```csharp
using (var decoder = PngBitmapDecoder.Create(ms))
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = decoder.Frames[0].Source; // 如果有多帧,则选择你需要的那一帧
bitmapImage.EndInit();
// 将图像设置到UI元素上
myImageControl.Source = bitmapImage;
}
```
这里假设`myImageControl`是一个包含`Image`或`ImageSource`属性的控件。
阅读全文