![](/img/trans.png)
[英]How to convert pixel byte array to bitmap image in windows phone 8
[英]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.