📜  c# 字节数组到位图 - C# (1)

📅  最后修改于: 2023-12-03 14:59:42.159000             🧑  作者: Mango

C# 字节数组到位图

在 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# 中对图像进行操作。这对于需要处理图像数据的应用程序非常有用。