我不知道更好的标题,但我会描述问题。阅读单色位图像素颜色
我们使用的一块硬件能够显示图像。 它可以显示分辨率为64 x 256的黑白图像。
问题是我们必须发送到设备的图像格式。 这不是一个标准的位图格式,而是一个简单的代表图像每个像素的 字节的数组。
0 =黑色,1 =白色。
因此,如果我们曾与大小的图片:4×4的字节数组可能看起来像:
和图像看起来像:
Bitmap http://www.mediafire.com/imgbnc.php/6ee6a28148d0170708cb10ec7ce6512e4g.jpg
问题是,我们需要通过在C#中创建一个单色位图 来创建该图像,然后将其转换为设备可理解的文件格式。
例如,可能会在设备上显示文本。为了做到这一点,他将 必须创建一个位图和文本写入它:
var bitmap = new Bitmap(256, 64);
using (var graphics = Graphics.FromImage(bitmap))
{
graphics.DrawString("Hello World", new Font("Courier", 10, FontStyle.Regular), new SolidBrush(Color.White), 1, 1);
}
有2个问题在这里:
- 生成位图是不是单色
- 生成位图有不同的二进制格式
所以我需要一种方法来:
- 生成.NET
- 单色位图阅读每个像素的单个像素的颜色位图
我发现,您可以将像素深度设置为16,24或32位,但还没有找到单色,我不知道如何读取像素数据。
建议欢迎。
更新:我不能使用Win32 PInvokes ...必须是平台中立!
后续:下面的代码现在适用于我。 (万一有人需要它)
private static byte[] GetLedBytes(Bitmap bitmap)
{
int threshold = 127;
int index = 0;
int dimensions = bitmap.Height * bitmap.Width;
BitArray bits = new BitArray(dimensions);
//Vertically
for (int y = 0; y < bitmap.Height; y++)
{
//Horizontally
for (int x = 0; x < bitmap.Width; x++)
{
Color c = bitmap.GetPixel(x, y);
int luminance = (int)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11);
bits[index] = (luminance > threshold);
index++;
}
}
byte[] data = new byte[dimensions/8];
bits.CopyTo(data, 0);
return data;
}
点!但是,如果使用Bitmap.LockBits而不是Bitmap.GetPixel,则可以获得卓越的性能! – 2009-03-02 11:41:00
Thnx! 经过一些小的调整,这段代码就像一个魅力:-) – TimothyP 2009-03-02 11:45:31