将像素颜色数组转换为位图的字节数组

本文关键字:数组 字节 字节数 位图 转换 像素 颜色 | 更新日期: 2023-09-27 18:08:45

我试图从像素颜色值的字符串数组创建BitMap。该数组包含76800个元素(320 x 240),其像素为十进制格式(例如:"11452343")。

我试图使用这个函数来创建我的BitMap

var b = new Bitmap(320, 240, PixelFormat.Format8bppIndexed);
var ncp = b.Palette;
for (int i = 0; i < 256; i++)
    ncp.Entries[i] = Color.FromArgb(255, i, i, i);
b.Palette = ncp;
var BoundsRect = new Rectangle(0, 0, 320, 240);
var bmpData = b.LockBits(BoundsRect, ImageLockMode.WriteOnly, b.PixelFormat);
var ptr = bmpData.Scan0;
var bytes = bmpData.Stride * b.Height;
var rgbValues = new byte[bytes];
for (var i = 0; i < pixelArray.Length; i++)
{
    // ISSUE OCCURS HERE
    rgbValues[i] = byte.Parse(pixelArray[i]);
}
Marshal.Copy(rgbValues, 0, ptr, bytes);
b.UnlockBits(bmpData);

我的问题发生在for循环内,我试图将十进制值转换为字节值以添加到rgbValues数组。如何将十进制颜色转换为要添加到数组中的字节值?

将像素颜色数组转换为位图的字节数组

根据我的理解,我认为你这样做是不对的。

我看到你正在构建一个灰度调色板,但是ARGB值不会指向该调色板..

假设每个像素都有一个十进制数,我认为首先创建一个具有默认ARGB颜色深度的位图会更容易。

绘制像素后,可以将其格式更改为Format8bppIndexed。

创建调色板和像素索引值最好由系统例程完成。

编辑:如果你真的想自己创建映射,你可以使用这行从十进制ARGB值创建一个灰度8位值decVal:

int grey = (byte)(Color.FromArgb(decVal).GetBrightness() * 255);

将像素设置为这些字节值应该会创建一个工作映射到你的灰度调色板,但如果我还没有尝试过的话。