Impressão Imagens BMP e JPG Impressora via porta serial

Bom dia amigos, gostaria da ajuda de vcs.
Alguem sabe me dizer como imprimir uma imagem BMP e JPG em um impressora via porta serial SPP.
Consegui enviar um texto, sem nenhuma formatação apenas transformando em um vetor de bytes, e no final adicionando um caracter \r, enviando via outputstream, e imprimi com sucesso, agora a duvida de como realizar a impressão de uma imagem.
OBS: preciso realizar esta impressão em baixo nivel, não é possivel utiliar apis como Print ou outra, tenho que fazer isso via stream.

Obrigado!

Bom. Você conseguiu imprimir ASCII pq a maioria das impressoras suporta um padrão muito primitivo, de impressoras matriciais. Imprimir a cores é uma tarefa bem diferente. Para isso, você precisa conhecer o protocolo PCL. Boa parte das impressoras suporta a versão 5 do protocolo, enquanto as novas a versão 6.0. Embora tenha sido criado pela HP, esse protocolo é largamente adotado.

Veja alguns manuais da PCL 5e:
PCL 5e Technical Quick Reference Guide
PCL 5e Technical Reference Manual Part 1
PCL 5e Technical Reference Manual Part 2

E prepare-se para um bocado de escovação de bits. Note que uma comunicação usando um protocolo da impressora é pode funcionar em poucos modelos de impressora, uma vez que você está fazendo o que o driver da impressora faz.

Outra forma seria tentar comunicar-se com a API de impressão do Windows. Isso tornaria sua aplicação independente de impressora, porém, isso não só irá gerar um programa que não é multiplataforma, como também irá exigir uso de JNI e, por conseqüência, seria mais facilmente desenvolvido em C++.

A última opção seria usar a API de impressão do Java.

Valeu pela ajuda, o bom que não preciso imprimir colorido, vai ser uma imagem em preto e branco, monocromatica.
A impressora não tem driver para o ambiente que a aplicação ficará rodando, por isso o motivo de ser tudo via porta serial, eu só preciso pegar uma imagem pronta, transforma-la em um array de bits, fazer o tratamento, e enviar pela porta serial, creio que resumindo é este o trabalho a ser feito.
Vou dar uma lida no que vc me passou, valeu!

Não é tão simples assim. Se você fizer isso, a impressora irá encarar os bytes como caracteres e tentar imprimi-los. Mais ou menos quando como você faz um type num programa executável no DOS, mas gastando muito papel e tinta.

Para imprimir imagens não tem escapatória. Você vai precisar entendar o protocolo da sua impressora.

Há que legal, hehe
A impressora que irei utilizar é a HP H470 com este link que vc me passou do PCL, dominando isso poderei imprimir imagem correto?

Sim.

É pura escovação de bits mesmo.

Algumas impressoras precisam, por exemplo, de imprimir em modo entrelaçado. É meio complicado para explicar, mas você vai ver que é bem mais chato que parece. Fora o fato que você irá ter de talvez inverter a ordem dos bits em um byte, por exemplo, converter niveis de cores para preto e branco, e outras coisas mais complicadas.

Não se esqueça de testar na impressora que você vai usar (e preparar-se para gastar um monte de papel e fita). Você vai errar muito, muito e muito no começo.

Não existe uma impressora virtual para realizar testes?

Jogue a saída em um arquivo, e ache algum utilitário que converta o formato PCL em um PDF (por exemplo). Pode ser algo como “pcl2pdf” ou coisa parecida.

Mas falando sério, sério mesmo.
O formato PCL não é muito trivial; por que é que você não usa o driver PCL do Windows ou do Linux mesmo?
Basta configurar o driver para que ele imprima na saída serial.
Você então usa as APIs tradicionais de impressão do Java (javax.print etc.)

É que não vou usar windows e nem linux, e sim windows mobile CDC, hoje faço impressão na impressora termina agora tenho que adicionar esta impressora para imprimir em A4, mas como não existe driver para windows mobile vai ter que ser na mão!

Outra coisa mais chata. Que eu saiba, essa é uma impressora USB (com opção para interface paralela). Ela não usa a porta serial .

Quando você fala com uma impressora USB, o perfil usado (device class) é “printer”, não “alguma coisa não especificada que se comporta, para o Windows ou o Linux, como se fosse uma interface serial”.

Ah, é que você não falou que era em Windows Mobile. Não é possível que não haja um driver de impressora HP para Windows Mobile - mesmo meu Nokia E63, que é muito menos poderoso que uma máquina típica Windows Mobile, tem drivers de impressora HP.

http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00259459&locale=en_US&taskId=110&prodSeriesId=242184&prodTypeId=18964

Não tem cara, quando vai pegar o driver é redirecionado para uma aplicação de terceiro, que faz a impressão, mas isso fica inviável, usar um programa externo, tem que ser tudo transparente.

http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareIndex.jsp?lang=en&cc=us&prodNameId=3434454&prodTypeId=18972&prodSeriesId=3434453&swLang=8&taskId=135&swEnvOID=2067