首页 > 解决方案 > 如何读取 8 位图像文件?

问题描述

我目前正在从事图像阅读和排序项目。我想问我如何读取 8 位图像文件?如果有帮助,我有一个可以读取 24 位图像文件的工作代码。该代码读取图像颜色代码并将它们添加到数组中。我想用 8 位图像文件做类似的事情。

var name = Path.GetFileNameWithoutExtension(path);
Bitmap image = new Bitmap(path);        

image.Save(name + "_24bit.bmp", ImageFormat.Bmp);

using (FileStream file = new FileStream(name + "_24bit.bmp", FileMode.Open, FileAccess.Read))
{
    byte[] b = new byte[file.Length];
    file.Read(b, 0, (int)file.Length);
    int width = BitConverter.ToInt32(b, 0x00012);
    int height = BitConverter.ToInt32(b, 0x0016);
    int points = (width * height);


    //Taškus verčiame į spalvų kodus
    int[] bs = new int[points];
    int j = 54;
    for (int i = 0; i < bs.Length; i++)
    {
        bs[i] = (((b[j + 2] << 8) + b[j + 1]) << 8) + b[j];
        j += 3;
    }
    //
}

标签: c#image

解决方案


8 位图像文件的每个像素仅由 1 个字节表示,而不是 24 位中的 3 个字节。

您需要确定它是 8 位颜色还是 8 位灰度。

8 位颜色被打包为 RRRGGGBB,例如红色 3 位,绿色 3 位,蓝色 2 位。灰度图像仅显示像素的亮度。

实际上,可以将 24 位彩色图像视为 3 个 8 位灰度通道,每个通道分配给每种颜色(红、绿、蓝)。


推荐阅读