Problema com junção de imagens

11 respostas
R

Pessoal peguei o seguinte código do tutorial da sun

import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Iterator;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;

public class Juntashot {
	public static void main(String[] args) {

		try {
			File f1 = new File("c:/1.gif");
			BufferedImage bi = ImageIO.read(f1);

			File f2 = new File("c:/2.gif");
			BufferedImage bi2 = ImageIO.read(f2);

			Iterator writers = ImageIO.getImageWritersByFormatName("png");
			ImageWriter writer = (ImageWriter) writers.next();

			File f = new File("c:\\myimage.png");
			ImageOutputStream ios = ImageIO.createImageOutputStream(f);
			writer.setOutput(ios);

			BufferedImage all;
			writer.write(all);

			BufferedImage first_bi = bi;
			BufferedImage second_bi = bi2;
			IIOImage first_IIOImage = new IIOImage(first_bi, null, null);
			IIOImage second_IIOImage = new IIOImage(second_bi, null, null);
			writer.write(null, first_IIOImage, null);
			if (writer.canInsertImage(1)) {
				writer.writeInsert(1, second_IIOImage, null);
			} else {
				System.err.println("Writer can't append a second image!");
			}

		} catch (Exception e) {
		}
	}

}

porem quando o uso ele escreve apenas a 1 imagem a segunda nao junta alguem sabe como usar.

11 Respostas

ViniGodoy

Seria útil se você dissesse o que quer fazer…

Que eu me lembre, esse método que você está usando aí é para unir imagens num gif.

R

intao ele ta pegando duas imagens e juntando em um bufer image dai ele salva um gif com as duas dentro

exemplo tem minha foto e a foto do meu cachoro quero que ele faça uma imagem eu_e_meu_cachorro.gif

essa imgagem tem as duas dentro uma em cima da outra.

E

Tio, já que é difícil para você escrever com clareza, pode postar uma imagem de exemplo que mostre o que você gostaria de fazer?

R

R

opa ja postei como a imagem ficaria

ViniGodoy

O código que você pegou era para provavelmente gerar um gif animado.
Se você só quer desenhar duas imagens numa imagem maior, o jeito mais fácil é assim:

import java.awt.image.BufferedImage;  
import java.io.File;  

import javax.imageio.ImageIO;  

public class Juntashot {  
   public static void main(String[] args) {  
      try {  
         BufferedImage bi = ImageIO.read(new File("c:/1.gif"));  
         BufferedImage bi2 = ImageIO.read(new File("c:/2.gif"));  

         //Criamos a imagem final. Ela tem a largura da imagem mais larga, 
         //e a altura das duas imagens somadas
         BufferedImage dest = new BufferedImage(
            Math.max(bi.getWidth(), bi2.getWidth()),  
            bi.getHeight() + bi2.getHeigth(),
            BufferedImage.TYPE_INT_ARGB);

         //Obtemos o contexto gráfico da imagem final.
         Graphics2D g2d = dest.createGraphics();

         //Desenhamos no topo da imagem final a primeira imagem
         g2d.drawImage(0,0, bi, null);

         //Abaixo dela, desenhamos a segunda imagem
         g2d.drawImage(0, bi.getHeight(), null);

         //Descartamos o contexto gráfico
         g2d.dispose();

         //Salvamos a imagem final no disco.
         ImageIO.write(dest, "png", new File("c:/myimage.png");
      } catch (Exception e) {  
         e.printStackTrace();
      }
   }
}

Mais informações, veja os artigos Uma visão rápida sobre Java2D e Trabalhando com Imagens, no portal do Ponto V!

R

opa deu certo valew

se tiver algum códico pra diminuir a imgem
eu tenho um mais ta muito extenso

valew

ViniGodoy

Dê uma olhada no método getScaledInstance() do BufferedImage. Com uma linha, vc redimensiona sua imagem.
Ou então, no método drawImage da classe graphics que recebe 4 coordenadas como parâmetro.
Uma terceira opção seria usar o comando scale() da classe Graphics2D antes de desenhar a imagem.

A classe ImageWorker, também pode te ajudar. Veja nela o método resizeAndFlip() que redimensiona e, opcionalmente, espelha a imagem na horizontal ou na vertical.

Dá uma lida nos artigos ali em cima. Eles ajudam bastante a entender como funciona o Java 2D.

R

opa valew era isso que eu preciva tudo que o pessoal passa tem 70 linhas

R

o vinicius

sera que tem como vc disponibilizar o pacote jgf

pra mim testa aquele código que você passou.

acho que só falta isso no programa depois tenho que fazer a interface.

mais a versão beta ja vai roda.

elá vai evitar os famosos cheaters em campeonatos preincipalmente cheaters visuais, alem disso fiz uma versão nova do punkbuster que pega todos os arquivos dlls que não forem do jogo.

o Programa é focado no campeonato de America’s Army porem pode ser usado em qualquer outro jogo.

cara seu nome vai estar no programa vc me salvou e me ajudou muito depois me passa seu nome por MP seu site ja tenho.

na publicação vai estar la quando estiver pronto eu te passo ele pra vc ver valew aé nao sei se vc leu a mp mais se rola grana fica sussa que tenho palavra mesmo sem vc pedir nada eu vou vou rachar com vc.

valew t+

Galera teve um pessoal que tento ajuda e tudo, mais o cara ta direto se matando gastando tempo dele pra me ajudar.

R
opa cara ja consegui eu tinha um código aqui dai dei uma lida nos artigos do seu site e funciono
public static void diminueImagem() {
		try {
			BufferedImage bi = ImageIO.read(new File("c:/myimage.png"));
			BufferedImage dest = new BufferedImage(bi.getWidth()/2, bi
					.getHeight()/2, BufferedImage.TYPE_INT_ARGB);
			Graphics2D g2d = dest.createGraphics();
			g2d.drawImage(bi, AffineTransform.getScaleInstance(0.5, 0.5), null);
			g2d.dispose();
			ImageIO.write(dest, "png", new File("c:/reduzida.png"));

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

valew em

Criado 25 de novembro de 2009
Ultima resposta 2 de dez. de 2009
Respostas 11
Participantes 3