Como mudar a cor de um pixel no jframe, urgente! [RESOLVIDO]

6 respostas
W

Olá galera,

Estou fazendo a leitura de um txt que contém o valor numérico da intensidade de um pixel (de 0 a 255) e preciso setar cada ‘cor’ em cada pixel de um jframe 1024x768. Tem algum jeito de setar a cor somente de um pixel no jframe?
Eu tentei criar um label com a cor e setar os bounds do label na janela mas deu estouro de memória por ser 1024x768 labels, rsrs.

Alguém pode me ajudar??!! Valew!

=========================

RESOLVI USANDO A CLASSE BUFFEREDIMAGE E SETANDO PIXEL A PIXEL.

6 Respostas

R

Redefina o método paintComponent() do JFrame e você poderá mudar a cor dos pixels sem problemas. A técnica é descrita no link a seguir:

http://java.sun.com/products/jfc/tsc/articles/painting/

W

roger_rf:
Redefina o método paintComponent() do JFrame e você poderá mudar a cor dos pixels sem problemas. A técnica é descrita no link a seguir:

http://java.sun.com/products/jfc/tsc/articles/painting/

kara,

li ali e fiz o seginte, mas não pintou kara:

public void paintComponent(Graphics g) {
		FileReader reader = null;
		try{
			reader = new FileReader("Digitalizacao/NCC-1701-Dgray.txt");
		}catch(FileNotFoundException e){
			JOptionPane.showMessageDialog(this, "Arquivo não encontrado!");
		}
		Scanner read = new Scanner(reader);
		int linhas = read.nextInt();
		int colunas = read.nextInt();
		
		for(int i=0; i<linhas; i++){
			for(int j=0; j<colunas; j++){
				Color cor = new Color(read.nextInt(),0,0);
				g.setColor(cor);
				g.drawOval(i, j, 1, 1);
			}
		}
	}
R

Faltou incluir a seguinte chamada no começo do método:

super.paintComponent(g);

A propósito, aconselho ler o valor do pixel antecipadamente numa rotina em separado. Do modo como está seu método, o arquivo vai ser lido TODA VEZ que seu formulário for repintado, o desempenho será prejudicado. Por fim, você abre o Reader mas não o fecha, o que causa “vazamento” de recursos.

W

roger_rf:
Faltou incluir a seguinte chamada no começo do método:

super.paintComponent(g);

A propósito, aconselho ler o valor do pixel antecipadamente numa rotina em separado. Do modo como está seu método, o arquivo vai ser lido TODA VEZ que seu formulário for repintado, o desempenho será prejudicado. Por fim, você abre o Reader mas não o fecha, o que causa “vazamento” de recursos.

Mas como separo em uma rotina separada e chamo só na primeira vez pra pintar a tela?

Se eu colocar separado e chamar no paintComponent, não vai chamar toda vez que repintar do mesmo jeito???

Outra coisa, eu to usando ali new Color(R,G,B), mas o que leio é valor de intensidade entre preto e branco e, como não sei, to usando o Red só pra pintar. Sabe me dizer qual é o de intensidade??

R

Leia o valor do pixel apenas uma vez, e armazene-o para uso posterior da rotina paintComponent(). Alguns momentos adequados para ler o valor: no momento em que o JFrame for construído, ou quando o usuário clicar um determinado botão.

Os valores RGB da cor preta são [0,0,0], e os valores RGB da cor branca são [255,255,255]. Para obter os tons de cinza entre preto e branco, basta informar valores RGB idênticos (por exemplo, [128,128,128]).

W

roger_rf:
Leia o valor do pixel apenas uma vez, e armazene-o para uso posterior da rotina paintComponent(). Alguns momentos adequados para ler o valor: no momento em que o JFrame for construído, ou quando o usuário clicar um determinado botão.

Os valores RGB da cor preta são [0,0,0], e os valores RGB da cor branca são [255,255,255]. Para obter os tons de cinza entre preto e branco, basta informar valores RGB idênticos (por exemplo, [128,128,128]).

muito obrigado meu caro!

deu tudo certo!

Criado 16 de agosto de 2011
Ultima resposta 16 de ago. de 2011
Respostas 6
Participantes 2