我有以下内容:
byte[] pixels = new byte[28] { 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00 };
这是一个颠倒的感叹号:
0x00, 0x00,
0x30, 0x00,
0x30, 0x00,
0x00, 0x00,
0x00, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x30, 0x00,
0x00, 0x00
二进制是:
00000000 00000000
00110000 00000000
00110000 00000000
00000000 00000000
00000000 00000000
00110000 00000000
00110000 00000000
00110000 00000000
00110000 00000000
00110000 00000000
00110000 00000000
00110000 00000000
00110000 00000000
00000000 00000000
我需要将其转换为位图/创建位图。所以感叹号是白色的,背景是黑色的。我也需要能够为像素着色。
怎么做?
答案 0 :(得分:3)
假设您的所有图片均为16x14
Bitmap bmp = new Bitmap(16, 14);
int line=0;
for (int i = 0; i < pixels.Length; i++)
{
for (int j = 0; j<8; j++)
{
if (((pixels[i] >> j) & 1) == 1)
{
bmp.SetPixel( (i%2)*8 + 7-j, line, Color.Black);
}
}
if(i%2==1) line++;
}
答案 1 :(得分:0)
考虑阅读Wikipedia about BMP format。您需要这样做以确保您的数组包含必要的元数据(例如宽度和高度)。进行这些更改后,您可以使用类似这样的内容
public static Bitmap ToBitmap(byte[] byteArray)
{
using (var ms = new MemoryStream(byteArray))
{
var img = (Bitmap)Image.FromStream(ms);
return img;
}
}
答案 2 :(得分:0)
根据我的理解,你想创建一个看起来类似于你的字节数组内部的位图(你的“感叹号”)。
您可以从头开始创建位图,并使用一些循环,只需在Bitmap
中设置像素即可。这是一个在黑色背景上绘制随机白色像素的简单示例。调整它以满足您的要求:
Bitmap zz = new Bitmap(100, 100);
using (Graphics g = Graphics.FromImage(zz))
{
// Draws a black background
g.Clear(Color.Black);
}
Random rnd = new Random();
for (int i = 0; i < zz.Height; i++)
{
for (int j = 0; j < zz.Width; j++)
{
// Randomly add white pixels
if (rnd.NextDouble() > 0.5)
{
zz.SetPixel(i, j, Color.White);
}
}
}
zz.Save(@"C:\myfile.bmp", ImageFormat.Bmp);