Impressão de imagens dinâmicas - Geração de documentos com formas de ondas

4 respostas
L

Pessoal, preciso de umas dicas de como resolver um problema.

Fiz um applet (ainda em teste) que lê um arquivo no próprio HD (no futuro ele irá ler dados em um banco de dados). Neste arquivo está armazenado um sinal analógico, uma forma de onda, que como teste coloquei uma onda triangular. Segue a tela para vocês terem uma idéia no arquivo anexo.
Preciso colocar um botão na tela que imprima numa impressora padrão da máquina a tela como é exibida, com os frames, e dentro dos frames as ondas.
Estes frames eu criei usando o objeto Graphics. Pinto na tela os traçados e a moldura dos frames. Não são figuras .bmp exibidas na tela.
Segue o código do método paint():

public void paint(Graphics g) {
		g.clearRect(0, 0, 1035, 760);
		g.setColor(Color.gray);
		g.drawRect(015, 010, 240, 210);	g.drawRect(270, 010, 240, 210);
		g.drawRect(525, 010, 240, 210);	g.drawRect(780, 010, 240, 210);
		g.drawRect(015, 230, 240, 210);	g.drawRect(270, 230, 240, 210);
		g.drawRect(525, 230, 240, 210);	g.drawRect(780, 230, 240, 210);
		g.drawRect(015, 450, 240, 210);	g.drawRect(270, 450, 240, 210);
		g.drawRect(525, 450, 240, 210);	g.drawRect(780, 450, 240, 210);
		int i=0;
		g.setColor(Color.black);
		int meioDeEscala = 105; // meioDeEscala é a metade da escala
		while(i<240 && (i+offsetAmostra) < array1.length) {
			g.drawLine(015+i, 010+meioDeEscala-( array1[i + offsetAmostra]>>bits), 015+i+1, 010+meioDeEscala-( array1[i+1 + offsetAmostra]>>bits));
			g.drawLine(270+i, 010+meioDeEscala-(array2[i + offsetAmostra]>>bits), 270+i+1, 010+meioDeEscala-(array2[i+1 + offsetAmostra]>>bits));
			g.drawLine(525+i, 010+meioDeEscala-( array3[i + offsetAmostra]>>bits), 525+i+1, 010+meioDeEscala-( array3[i+1 + offsetAmostra]>>bits));
			g.drawLine(780+i, 010+meioDeEscala-( array4[i + offsetAmostra]>>bits), 780+i+1, 010+meioDeEscala-( array4[i+1 + offsetAmostra]>>bits));
			g.drawLine(015+i, 230+meioDeEscala-( array5[i + offsetAmostra]>>bits), 015+i+1, 230+meioDeEscala-( array5[i+1 + offsetAmostra]>>bits));
			g.drawLine(270+i, 230+meioDeEscala-(array6[i + offsetAmostra]>>bits), 270+i+1, 230+meioDeEscala-(array6[i+1 + offsetAmostra]>>bits));
			g.drawLine(525+i, 230+meioDeEscala-( array7[i + offsetAmostra]>>bits), 525+i+1, 230+meioDeEscala-( array7[i+1 + offsetAmostra]>>bits));
			g.drawLine(780+i, 230+meioDeEscala-( array8[i + offsetAmostra]>>bits), 780+i+1, 230+meioDeEscala-( array8[i+1 + offsetAmostra]>>bits));
			g.drawLine(015+i, 450+meioDeEscala-( array9[i + offsetAmostra]>>bits), 015+i+1, 450+meioDeEscala-( array9[i+1 + offsetAmostra]>>bits));
			g.drawLine(270+i, 450+meioDeEscala-(array10[i + offsetAmostra]>>bits), 270+i+1, 450+meioDeEscala-(array10[i+1 + offsetAmostra]>>bits));
			g.drawLine(525+i, 450+meioDeEscala-( array11[i + offsetAmostra]>>bits), 525+i+1, 450+meioDeEscala-( array11[i+1 + offsetAmostra]>>bits));
			g.drawLine(780+i, 450+meioDeEscala-( array12[i + offsetAmostra]>>bits), 780+i+1, 450+meioDeEscala-( array12[i+1 + offsetAmostra]>>bits));
			i++;
		}

Minha pergunta é:

Como imprimo tal tela? É possível eu criar um documento tipo "print screen" e mandá-lo para a impressora?

Será que eu precisarei criar figuras temporárias (.bmp, sei lá), e depois colocá-las no documento?

Agradeço a ajuda!!


4 Respostas

T

http://java.sun.com/docs/books/tutorial/2d/printing/index.html

L

Valeu Thingol, vou estudar o link! Esqueci de procurar na fonte!!!

T

Esqueci de uma coisa. Não sei se impressão de applets tem alguma sutileza - eu sempre aconselho a não usar applets exceto em último caso, porque não é possível fazer um monte de coisas, ou então um monte de coisas não funcionam do mesmo jeito que uma aplicação Swing ou SWT normal, devido a um monte de problemas causados pelo browser.

L

O problema é que estes sinais devem ser visualizados via Internet. E acho que um Servlet ficará muito lento, pois as telas terão que ser atualizadas, e como são gráficos, já viu…

Ainda esta aplicação deverá permitir uma série de manipulações dos sinais, então acredito que um applet seria o ideal, pois envio somente os dados, e a manipulação fica a cargo do applet dentro do browser.

Lógico que terei que passar por um processo de homologação de browsers, mas acho que vale a pena.

Mais uma vez obrigado!!!

Criado 22 de abril de 2008
Ultima resposta 22 de abr. de 2008
Respostas 4
Participantes 2