public static byte[] MakePixdata(PIXHeader header, Bitmap bmp) { MemoryStream m = new MemoryStream(); for (int y = 0; y < header.Height; y++) { for (int x = 0; x < header.Width; x++) { switch (header.PixelFormat) { case 5: Color c = bmp.GetPixel(x, y); ushort value = (ushort)(c.R >> 3); value <<= 6; value |= (ushort)(c.G >> 2); value <<= 5; value |= (ushort)(c.B >> 3); m.WriteByte((byte)(value >> 8)); m.WriteByte((byte)value); break; } } } return(m.ToArray()); }
public static Bitmap MakeBitmap(PIXHeader header, PIXData image) { if (header == null || image == null) { return(null); } Bitmap result = new Bitmap(header.Width, header.Height); Graphics gr = Graphics.FromImage(result); gr.Clear(Color.White); MemoryStream m = new MemoryStream(image.ImageData); for (int y = 0; y < header.Height; y++) { for (int x = 0; x < header.Width; x++) { switch (header.PixelFormat) { case 5: m.Seek((x + y * header.Width) * image.BytesPerPixel, 0); ushort value = Helper.ReadU16LE(m); byte b = (byte)(value & 0x1F); value >>= 5; byte g = (byte)(value & 0x3F); value >>= 6; byte r = (byte)(value & 0x1F); r <<= 3; g <<= 2; b <<= 3; result.SetPixel(x, y, Color.FromArgb(255, r, g, b)); break; } } } return(result); }