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

C# 将位图的像素颜色数组转换为字节数组,c#,arrays,bitmap,C#,Arrays,Bitmap,我正在尝试从像素颜色值的字符串数组创建位图。该数组包含76800个元素(320 x 240),其像素为十进制格式(例如“11452343”) 我正在尝试使用此函数创建我的位图 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,

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

我正在尝试使用此函数创建我的
位图

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);
var b=新位图(320、240,PixelFormat.Format8Bppined);
var ncp=b.调色板;
对于(int i=0;i<256;i++)
ncp.Entries[i]=Color.FromArgb(255,i,i,i);
b、 调色板=ncp;
var BoundsRect=新矩形(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=新字节[字节];
对于(var i=0;i

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

从我希望了解的情况来看,我认为您做得不对

我看到您正在构建灰度调色板,但ARGB值不会指向该调色板

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

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

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

编辑:如果您确实想自己创建映射,可以使用此行从十进制ARGB值decVal创建灰度8位值:

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

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

字符串颜色的像素格式是什么,是否需要像素格式的位图。Format8BppingDexed?十进制格式的像素(例如“11452343”)是rgb吗?或者只是一个输入错误?一个字节的定义是-128到127,所以你不能;除非您使用编码。@Gabe:实际上是0到255。是-128到127。啊,对了,在C#中,字节是隐式无符号的