C # - ¿Cómo convertir una imagen en un color de la imagen de 8 bits?
-
21-09-2019 - |
Pregunta
Necesito convertir una imagen PNG cargado desde un archivo en una matriz de 8 bits por píxel de bytes utilizado por otro dispositivo (programación integrado).
estoy copiando más de píxel por píxel en una nueva imagen creada con un color de 16 bits - Format16bppRgb565
, pero necesito Format8bpp
, que no está presente en el .NET Framework. (No puedo usar Format8bppIndexed
desde el otro dispositivo no puede manejar mapas de bits indexadas)
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));
}
}
Entonces, ¿cómo puedo convertir una imagen en un 8 bits por píxel matriz de bytes?
- ¿Puedo utilizar el formato indexado de 8 bits y extraer los bytes? -
Format8bppIndexed
- ¿Puedo calcular los colores de los píxeles al reducir el color de 32 bits R, G, B a valores de 8 bits?
- ¿Hay una biblioteca de C # que hace esto ya?
- "La manera más fácil es crear un nuevo mapa de bits de 8 bits, y dibujar la imagen de 24 bits en la misma." - ¿Cómo
Solución
A pesar de que no estoy seguro de cómo hacerlo con plain vanilla C # se puede utilizar el FreeImage Proyecto bibliotecas para convertir formatos de imágenes:
FreeImage es una biblioteca de código abierto proyecto para los desarrolladores que deseen para perfeccionar la imagen de gráficos populares formatos como PNG, BMP, JPEG, TIFF y otros según sea necesario por la tecnología multimedia de hoy aplicaciones. FreeImage es fácil de usar, rápido, seguro multi-hilo, compatible con todas las versiones de 32 bits de Ventanas, y multiplataforma (funciona tanto con Linux y Mac OS X).
Está escrito en C ++, pero tiene buenas envoltorios de .NET que puede utilizar.
Otros consejos
Ya lo hice en un proyecto de reconocimiento de patrones. Buscar algunos libros de procesamiento de imágenes y reconocimiento de patrones se pueden encontrar estas soluciones.
a) Si desea convertir a escala de grises se pueden encontrar en general dos soluciones.
# 1 Un promedio de canales RGB. - Puede tomar valores de 8 bits para Avery solo canal y calcular pixel = (R + G + B) / 3
# 2 Tome sólo el componente verde. Se ve mejor.
b) Si desea convertir a la representación de color de 8 bits es necesario utilizar una tabla de colores. Se puede ver una solución a este problema http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion .aspx