2012-02-23 97 views
1

位图我有以下几点:创建一个从二进制数据

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

假设所有的图像是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++; 
} 
+0

谢谢 - 它的工作原理! – 2012-02-23 14:20:24

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

参数不是在这条线有效的例外:VAR IMG =(位图)Image.FromStream(MS); – 2012-02-23 13:35:59

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); 
+0

我需要一个算法来纠正它。我有很多符号,不仅仅是这个符号,所以算法很重要。 用于绘制位图,这是一个步骤。需要一个算法,虽然 – 2012-02-23 13:23:38