我正在尝试从像素颜色值的字符串数组创建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
数组。如何将该十进制颜色转换为字节值以添加到数组?
答案 0 :(得分:1)
从我希望的理解,我认为你没有做到这一点......
我看到你正在构建一个灰度调色板,但ARGB值不会指向那个调色板..
假设每个像素都有一个十进制数,我认为首先创建一个具有默认ARGB颜色深度的Bitmap会更容易。
绘制像素后,可以将其格式更改为Format8bppIndexed。
创建调色板和像素索引值最好由系统例程完成。
编辑:如果您真的想自己创建映射,可以使用此行从十进制ARGB值decVal创建灰度8位值:
int grey = (byte)(Color.FromArgb(decVal).GetBrightness() * 255);
将像素设置为这些字节值应该会创建一个工作映射到您的灰度调色板但是我还没有尝试过它..