【问题标题】:Create bitmap from binary data从二进制数据创建位图
【发布时间】:2012-03-13 21:31:23
【问题描述】:

我有以下:

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

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

如何做到这一点??

【问题讨论】:

    标签: c# bitmap binary pixel


    【解决方案1】:

    假设你所有的图片都是 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++;
    }
    

    【讨论】:

      【解决方案2】:

      据我了解,您希望创建一个与字节数组中的内容相似的位图(您的“感叹号”)。

      您可以从头开始创建位图,并使用一些循环,只需在 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);
      

      【讨论】:

      • 我需要一个算法来做到这一点。我有很多符号,不仅仅是这个,所以算法很重要。可以在位图上绘图,这是前进的一步。需要一个算法来解决
      【解决方案3】:

      考虑阅读Wikipedia about BMP format。您将需要它来确保您的数组包含必要的元数据(例如宽度和高度)。进行这些更改后,您可以使用类似的东西

      public static Bitmap ToBitmap(byte[] byteArray)
      {
         using (var ms = new MemoryStream(byteArray))
         {
           var img = (Bitmap)Image.FromStream(ms);
           return img;
         }
      }
      

      【讨论】:

      • parameter is not valid exception on this line: var img = (Bitmap)Image.FromStream(ms);
      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2022-01-13
      相关资源
      最近更新 更多