2010-01-27 19 views
6

Estoy trabajando en una aplicación que imprime una carpeta de archivos de imagen, incluidos JPEG y TIFF. Las imágenes TIFF suelen ser en blanco y negro (1bpp).¿Cómo puedo verificar la profundidad de color de un mapa de bits?

Después de cargar la imagen, quiero para determinar si la imagen es color o B & W o escala de grises para que pueda enviar la imagen a la impresora correcta (impresora a color o una impresora en blanco y negro).

Estoy usando el Bitmap constructor image = new Bitmap(filename); para cargar la imagen.

EDIT: La respuesta a comprobar la profundidad de píxeles es ideal para B & W. Ideas en comprobar si la imagen está en escala de grises y sin iteración a través de cada píxel?

Respuesta

3

La forma correcta de comprobar esto es:

Para archivos JPEG debe comprobar las propiedades adecuadas utilizando la colección PropertyItems del mapa de bits. Esto puede contener las etiquetas EXIF apropiadas para ayudar a determinar la profundidad de bits. El siguiente paso sería analizar el JPEG header y buscar el marcador de "inicio del fotograma" y luego el número de componentes en la imagen.

El método final es cargar el JPEG en un objeto Bitmap y comparar el número de píxeles con el forumla (ancho * alto * bytes_per_pixel). Por lo tanto, si carga el mapa de bits y la cantidad de bytes de datos brutos reales es igual a (ancho * alto), entonces sabrá que es una apuesta segura que la imagen tenga 1 byte por píxel y, como tal, es en escala de grises.

Lo último que querrá comprobar es el PixelFormat del mapa de bits en sí.

Para el formato de archivo TIFF, debe hacer lo mismo con la colección PropertyItems y marcar la etiqueta correspondiente mencionada en la especificación. Si esto falla, haga la comparación de bytes de imagen y finalmente use la propiedad PixelFormat como último recurso.

10

Sólo echa esta propiedad

image.PixelFormat 

a las coincidencias en uno de los valores en System.Drawing.Imaging.PixelFormat

A pesar de que se quiere enviar algo más que Negro & blanca a la impresora W B &, se también debería enviar allí cualquier balanza gris.

+0

Loco, busqué en la lista de miembros de la clase Bitmap, no estoy seguro de cómo me lo perdí. –

+0

Aún no acepté la respuesta porque la estaba probando. Pensé en cómo comprobar la escala de grises también. Tal vez debería editar la pregunta para aclarar eso. –

2

Usa su propiedad PixelFormat.

Cuestiones relacionadas