C# 将位图转换为字节数组以用于 LED 显示屏
C# convert bitmap to byte array for a led display
我有一个led显示屏,我可以发送一个字节数组,一位代表一个led。显示屏有 9216 个 LED。字节数组的长度为 1152 字节 (96 x 96 / 8)。
前 12 个字节代表第一行,接下来的 12 个字节代表第二行,...
我想使用 System.Drawing.Bitmap
进行绘图并将其发送到显示器。
如何轻松地将像素信息转换成这种格式?
var bmp = new Bitmap(96, 96);
using (var g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
var p = new Pen(Color.Black);
var p1 = new Point(1, 0);
var p2 = new Point(0, 0);
g.DrawLine(p, p1, p2);
}
var imageBytes = Convert(bmp);
转换器实现示例(位问题)
public static byte[] Convert(Bitmap bmp)
{
var size = bmp.Width * bmp.Height / 8;
var buffer = new byte[size];
var i = 0;
for (var y = 0; y < bmp.Height; y++)
{
for (var x = 0; x < bmp.Width; x++)
{
var color = bmp.GetPixel(x, y);
if (color.B != 255 || color.G != 255|| color.R != 255)
{
var pos = i / 8;
var bitInByteIndex = 1;
buffer[pos] = (byte)(1 << bitInByteIndex);
}
i++;
}
}
return buffer;
}
@谢谢@dlatikay!
我唯一的问题是 LSB 和 MSB
LSB?
buffer[pos] |= (byte)(1 << (7 - bitInByteIndex));
MSB?
buffer[pos] |= (byte)(1 << bitInByteIndex);
转换器工作
public static byte[] Convert(Bitmap bmp)
{
var size = bmp.Width * bmp.Height / 8;
var buffer = new byte[size];
var i = 0;
for (var y = 0; y < bmp.Height; y++)
{
for (var x = 0; x < bmp.Width; x++)
{
var color = bmp.GetPixel(x, y);
if (color.B != 255 || color.G != 255|| color.R != 255)
{
var pos = i / 8;
var bitInByteIndex = x % 8;
buffer[pos] |= (byte)(1 << (7 - bitInByteIndex));
}
i++;
}
}
return buffer;
}
我有一个led显示屏,我可以发送一个字节数组,一位代表一个led。显示屏有 9216 个 LED。字节数组的长度为 1152 字节 (96 x 96 / 8)。
前 12 个字节代表第一行,接下来的 12 个字节代表第二行,...
我想使用 System.Drawing.Bitmap
进行绘图并将其发送到显示器。
如何轻松地将像素信息转换成这种格式?
var bmp = new Bitmap(96, 96);
using (var g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
var p = new Pen(Color.Black);
var p1 = new Point(1, 0);
var p2 = new Point(0, 0);
g.DrawLine(p, p1, p2);
}
var imageBytes = Convert(bmp);
转换器实现示例(位问题)
public static byte[] Convert(Bitmap bmp)
{
var size = bmp.Width * bmp.Height / 8;
var buffer = new byte[size];
var i = 0;
for (var y = 0; y < bmp.Height; y++)
{
for (var x = 0; x < bmp.Width; x++)
{
var color = bmp.GetPixel(x, y);
if (color.B != 255 || color.G != 255|| color.R != 255)
{
var pos = i / 8;
var bitInByteIndex = 1;
buffer[pos] = (byte)(1 << bitInByteIndex);
}
i++;
}
}
return buffer;
}
@谢谢@dlatikay!
我唯一的问题是 LSB 和 MSB
LSB?
buffer[pos] |= (byte)(1 << (7 - bitInByteIndex));
MSB?
buffer[pos] |= (byte)(1 << bitInByteIndex);
转换器工作
public static byte[] Convert(Bitmap bmp)
{
var size = bmp.Width * bmp.Height / 8;
var buffer = new byte[size];
var i = 0;
for (var y = 0; y < bmp.Height; y++)
{
for (var x = 0; x < bmp.Width; x++)
{
var color = bmp.GetPixel(x, y);
if (color.B != 255 || color.G != 255|| color.R != 255)
{
var pos = i / 8;
var bitInByteIndex = x % 8;
buffer[pos] |= (byte)(1 << (7 - bitInByteIndex));
}
i++;
}
}
return buffer;
}