Pergunta

Estou trabalhando em um aplicativo que imprime uma pasta de arquivos de imagem, incluindo JPEG e TIFF. As imagens do TIFF são geralmente em preto e branco (1BPP).

Depois de carregar a imagem, quero determinar se a imagem é Cor ou B&W ou Escala de cinza Para que eu possa enviar a imagem para a impressora direita (impressora colorida ou impressora em preto e branco).

Estou usando o Bitmap construtor image = new Bitmap(filename); para carregar a imagem.

EDITAR: A resposta para verificar a profundidade do pixel é ótima para B&W. Alguma idéia de verificar se a imagem está em escala de cinza sem iterar em todos os pixels?

Foi útil?

Solução

A maneira correta de verificar isso é:

Para arquivos JPEG, você deve verificar as propriedades apropriadas usando o Propriedade Coleção do bitmap. Isso pode conter o apropriado Exif Tags para ajudar a determinar a profundidade do bit. O próximo passo seria analisar o JPEG Cabeçalho e procure o marcador 'Início do quadro' e, em seguida, o número de componentes na imagem.

O método final é carregar o JPEG em um objeto de bitmap e comparar o número de pixels com o Forumla (largura * altura * bytes_per_pixel). Portanto, se você carregar o bitmap e o número de bytes de dados brutos reais forem iguais a (largura * altura), você sabe que é uma aposta segura que a imagem tem 1 byte por pixel e, como tal, é escala de cinza.

A última coisa que você deseja verificar é o pixelformat do próprio bitmap.

Para o Tiff Formato de arquivo Você deve fazer a mesma coisa usando a coleção PropertyItems e verificar a tag apropriada mencionada na especificação. Se eles falharem, faça a comparação da imagem e, finalmente, use a propriedade Pixelformat como último recurso.

Outras dicas

Basta verificar esta propriedade

image.PixelFormat

Ele corresponderá a um dos valores em System.drawing.imaging.pixelformat

Embora você queira enviar mais do que apenas preto e branco para a impressora B&W, você também deve enviar escalas cinza para lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top