一直byte[]以及图片宽高,通过循环写入像素值的方式,将Byte[]生成BitmapImage数据
时间: 2024-10-24 08:10:12 浏览: 27
如何将silverlight中的图片控件保存到文件
4星 · 用户满意度95%
要使用 `byte[]` 和宽度、高度信息生成 `BitmapImage`,你需要按照以下步骤操作:
1. **初始化BitmapInfo和BitmapData**:
创建一个 `BitmapInfo` 并填充宽度、高度等属性,然后获取相应的 `BitmapData` 对象:
```csharp
BitmapSource bitmapSource;
int width = ...; // 图片宽度
int height = ...; // 图片高度
PixelFormat format = PixelFormats.Gray8; // 或者其他的合适格式
BitmapInfo bmi = new BitmapInfo();
bmi.Width = width;
bmi.Height = height;
bmi.Format = format;
BitmapData bmpData = new BitmapData(bmi, true, format, 0, bmi.Pitch);
```
2. **遍历并写入像素值**:
将 `byte[]` 中的数据按行复制到 `BitmapData` 上:
```csharp
unsafe
{
byte* ptr = (byte*)bmpData.Scan0;
for (int y = 0; y < height; y++)
{
byte* rowPtr = ptr + y * bmpData.Stride;
for (int x = 0; x < width; x++)
{
rowPtr[x] = byteArray[y * width + x]; // 注意索引可能需要调整,取决于字节数组存储模式
}
}
}
```
3. **创建BitmapImage并绑定到UI**:
最后,创建 `BitmapImage` 并将其绑定到 UI 元素上:
```csharp
bitmapSource = BitmapSource.Create(width, height, 96, 96, format, null, bmpData.Scan0, bmpData.Stride);
Image myImage = new Image();
myImage.Source = bitmapSource;
```
阅读全文