繁体   English   中英

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

[英]Convert Pixel Color Array to Byte Array For BitMap

我正在尝试从像素颜色值的字符串数组创建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循环内, for这里我尝试将十进制值转换为字节值以添加到rgbValues数组中。 如何将十进制颜色转换为字节值以添加到数组中?

从我希望我理解的角度来看,我认为您没有做到这一点。

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

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

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

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

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

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

将像素设置为这些字节值应该会在您的灰度调色板中创建一个有效的映射,但是我自己还没有尝试过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM