📅  最后修改于: 2023-12-03 14:59:42.159000             🧑  作者: Mango
在 C# 中,我们可以将字节数组(byte array)转换为位图(bitmap)。
以下是一个示例代码,演示如何将字节数组转换为位图。
using System;
using System.Drawing;
using System.Drawing.Imaging;
class Program
{
static void Main(string[] args)
{
// 从文件或网络中读取字节数组
byte[] imageData = ReadImageData();
// 创建位图对象
Bitmap bitmap = new Bitmap(100, 100);
// 在位图对象上锁定为读写模式
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
// 对位图的数据进行操作
unsafe
{
byte* ptr = (byte*)bitmapData.Scan0;
for (int i = 0; i < imageData.Length; i += 3)
{
// RGBA 像素格式中,每个像素由 4 个字节表示(红、绿、蓝、透明度)
ptr[0] = imageData[i + 2]; // 红色
ptr[1] = imageData[i + 1]; // 绿色
ptr[2] = imageData[i]; // 蓝色
ptr[3] = 255; // 透明度
ptr += 4; // 指向下一个像素
}
}
// 解锁位图对象,使其可用
bitmap.UnlockBits(bitmapData);
// 保存位图到文件或显示到屏幕上
bitmap.Save("output.bmp", ImageFormat.Bmp);
}
static byte[] ReadImageData()
{
// 从文件或网络中读取字节数组
return new byte[] { 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00 };
}
}
首先,我们需要读取字节数组。这可以通过从文件或网络中读取字节数组来完成,这取决于具体的需求。
然后,我们需要创建一个位图对象。在这里,我们通过指定宽度和高度来创建一个大小为 100x100 的位图对象。
接着,我们锁定位图对象为读写模式。这告诉位图对象,我们将要对它的像素进行操作。为了实现这一点,我们需要获取位图的数据,并转换为指向字节数组的指针。然后,我们迭代字节数组,并将每个像素写入位图对象中。
最后,我们解锁位图对象,并将其保存到文件或显示在屏幕上。在这里,我们将位图保存为 BMP 文件。
通过将字节数组转换为位图,我们可以在 C# 中对图像进行操作。这对于需要处理图像数据的应用程序非常有用。