从字节数组创建 PNG

Ste*_*bbi 6 .net c# png

我有一个一维字节数组,其中有 A、R、G 和 B 的单独值,并且我知道预期图像的高度和宽度。如何对这些数据进行编码并将其另存为 PNG 格式?

use*_*167 5

byte[] data = new byte[] {
    255, 255, 000, 000,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 000, 000, 
    255, 255, 255, 255,  255, 255, 000, 000,  255, 255, 255, 255,  255, 255, 000, 000,  255, 255, 255, 255, 
    255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 000, 000,  255, 255, 255, 255,  255, 255, 255, 255, 
    255, 255, 255, 255,  255, 255, 000, 000,  255, 255, 255, 255,  255, 255, 000, 000,  255, 255, 255, 255, 
    255, 255, 000, 000,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 000, 000 
  };

  Bitmap bmp = new Bitmap(5, 5);
  for (int y = 0; y < 5; ++y)
    for (int x = 0; x < 5; ++x)
    {
      int offset = y * 5 * 4 + x * 4;
      bmp.SetPixel(x, y, Color.FromArgb(data[offset], data[offset + 1], data[offset + 2], data[offset + 3]));
    }
  bmp.Save(@"c:\tmp.png");
}
Run Code Online (Sandbox Code Playgroud)

如果数组中的值按以下方式排序:BGRABGRABGRA ...您可以使用以下代码,这应该更快:

byte[] data = new byte[] {
  // B    G    R    A     B    G    R    A     B    G    R    A
      0,   0, 255, 255,    0,   0,   0, 255,    0, 255,   0, 255,
      0,   0,   0, 255,    0, 255,   0, 255,  255, 255, 255, 255,
      0, 255,   0, 255,    0,   0,   0, 255,  255,   0,   0, 255
  };
  int width = 3;
  int height = 3;

  Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
  var bitmapData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, bmp.PixelFormat);
  Marshal.Copy(data, 0, bitmapData.Scan0, data.Length);
  bmp.UnlockBits(bitmapData);
  bmp.Save(@"c:\tmp.png");
Run Code Online (Sandbox Code Playgroud)

该图像应如下所示:在此输入图像描述