I need to convert a PNG Image loaded from a file into an 8 bit-per-pixel byte array used by another device (embedded programming).
I'm copying over pixel by pixel into a new Image created with a 16-bit color - Format16bppRgb565
, but I need Format8bpp
, which is not present in the .NET Framework. (I cannot use Format8bppIndexed
since the other device cannot handle indexed bitmaps)
Bitmap img = new Bitmap(imgPath);
Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);
for (int I = 0; I <= img.Width - 1; I++) {
for (int J = 0; J <= img.Height - 1; J++) {
img8.SetPixel(I, J, img.GetPixel(I, J));
}
}
So how can I convert an Image into an 8-bit per pixel byte array?
- Can I use the 8-bit indexed format and extract the bytes? -
Format8bppIndexed
- Can I calculate the pixel colors by reducing the 32-bit color R,G,B values to 8-bit?
- Is there a C# library that does this already?
- "The easiest way is to create a new 8 bit bitmap, and draw your 24 bit image onto it." - how?
Although I'm not sure how to do it with plain vanilla C# you can use the FreeImage Project libraries to convert images formats:
It's written in C++ but has good .NET wrappers you can use.