从二进制数据创建位图

时间:2012-02-23 13:07:34

标签: c# bitmap binary pixel

我有以下内容:

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

我需要将其转换为位图/创建位图。所以感叹号是白色的,背景是黑色的。我也需要能够为像素着色。

怎么做?

3 个答案:

答案 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);