Multiplas layers com java

5 respostas
souarte

olá. tou presisando fazer o seguinte:
tenho um programa que baixa uma imagens do servidor.
queria que essas imagens, em determinado momento, fossem modificadas. para isso, deve existir uma imagem, como uma máscara, que deve ser colocada sobre as outras imagens. algo como trabalhar em camadas num editor de imagens.
exemplo: tenho uma imagem com minha foto, aí tenho outra imagem do mesmo tamanho, mas transparente e com o meu nome(nao transparente) na parte de baixo da imagem. aí a imagem transparente deve ser colocada sobre minha foto, e minha foto deverá ficar com meu nome na parte de baixo.
isso é possivel em java?

5 Respostas

ViniGodoy

Claro que é possível.
http://www.guj.com.br/posts/list/55205.java

souarte

olá Vinigodoy,

agora outro problema, as imagens nao sao do mesmo tamanho, e queria deichá-las do mesmo tamanho.
o programa tem uma classe que estende de JLabel. aqui o construtor da classe:

public ImagePanel(Image i, JComponent par, CVWObject obj) {
		super(obj.name, new ImageIcon(i), CENTER);
		setVerticalTextPosition(JLabel.BOTTOM);
		setHorizontalTextPosition(JLabel.CENTER);
		
		// create the font to use
		Font font = new Font("SansSerif", Font.PLAIN, 12);
		setForeground(Color.black);
		setFont(font);

		image = i;
		cvwObj = obj;
		name = cvwObj.name;
		objNum = cvwObj.objNum.strValue();
		parent  = par;
		cvwObj.addObserver(this);
		setType(); 

	}

aí nao sei como fazer isso, eu havia tentado sobrescrever o método paintComponent assim:

void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		ImageApp parent = null;
		if (this.parent instanceof ImageApp) {
			parent = (ImageApp) this.parent;
		}
		g.drawImage(image, 0, 0, 25, 30, this);
	}

mas aí aparece a foto do tamanho original e essa outra foto por cima. não sei o que fazer, tem como eu setar o tamanho da Image antes da chamada de super? pois acho que resolveria né?

ViniGodoy

Leia o JavaDoc do Graphics2D. Há diversas formas de desenhar a imagem, inclusive mudando seu tamanho, desenhar só parte da imagem original, etc…

souarte

mas eu já fiz uma classe de teste que desenha a imagem de amanho diferente.
o problema é que não consigo fazer isso pra essa classe. pois a Image é usada pra criar um ImageIcon que vai num contrutor da JLabel.

souarte

olá,

quase conseguia fazer usando o seguinte:

public ImageIcon resizeImage(Image im) {
		int width=20, height=20;
		BufferedImage buffer = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
		Graphics2D g = buffer.createGraphics();
		g.drawImage(im , 0, 0, width, height, this);
		ImageIcon icon = new ImageIcon(buffer);
		g.dispose();
		return icon;

	}

esse metodo faz quase o que eu queria, ou seja, retorna a um imageIcon do tamanho que eu quero.
mas o problema é que quando eu uso esse imageicon ele nao aparece. até xegou a aparecer na primeira vez, mas nao sei porque motivo nao apareceu mais. e quando eu mudo TRANSLUCENT por outro tipo, a imagem aparece preta.
acho que as imagens que o programa pega do servidor sao GIFs. será por isso esse problema? pois quando testei com uma imagem PNG nao deu problema.

Criado 15 de julho de 2008
Ultima resposta 21 de jul. de 2008
Respostas 5
Participantes 2