我不知道更好的標題,但我會描述問題。閱讀單色位圖像素顏色
我們使用的一塊硬件能夠顯示圖像。 它可以顯示分辨率爲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