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
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top