Boa tarde, eu preciso fazer o seguinte programa:
Programa para soma de duas imagens (tons de cinza) com resoluções possiveis de 1024x1024, 2048x2048 ou 4096x4096.
A ideia é a simples. Tenho 2 imagens de tamanhos iguais (pra facilitar), e trato cada imagem como uma matriz de pixel. Pego um pixel em um ponto da primeira imagem e somo com o pixel desse mesmo ponto da segunda imagem e jogo numa terceira imagem.
Já pesquisei em diversos sites, foruns mas até agora não consegui terminar de fato o programa. Está quase pronto, mas não estou conseguindo fazer mostrar na tela o buffered image da imagem final bfi3 (a matriz com o resultado da soma). Só aparece uma imagem branca. :(
Caso alguém enxergar meu erro e me ajudar seria de grande ajuda.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.io.File;
import javax.imageio.ImageIO;
public class Main {
public static void main(String[] args) {
// TODO code application logic here
Image img01 = null;
Image img02 = null;
try {
img01 = ImageIO.read(new File("imagem.jpg"));
img02 = ImageIO.read(new File("imagem2.jpg"));
}
catch (Exception e) {
// TODO: handle exception
}
int pixel1;
int pixel2;
int widthImg01 = img01.getWidth(null);
int widthImg02 = img02.getWidth(null);
int heightImg01 = img01.getHeight(null);
int heightImg02 = img02.getWidth(null);
int img03[][] = new int [widthImg01][heightImg01] ;
int totalwidth = widthImg01 + widthImg02;
int totalHeigh = heightImg01;
Desenha desenha = new Desenha();
//Acusa erro caso as imagens sejam de tamanhos diferentes
if (widthImg01 != widthImg02)
System.out.println("Imagens de tamanho diferentes!");
BufferedImage bfi = new BufferedImage(widthImg01, heightImg01, BufferedImage.TYPE_INT_ARGB);
BufferedImage bfi2 = new BufferedImage(widthImg02, heightImg02, BufferedImage.TYPE_INT_ARGB);
BufferedImage bfi3 = new BufferedImage(widthImg01, heightImg01, BufferedImage.TYPE_INT_ARGB);
int tamanho = 0;
for (int i=0; i<widthImg01; i++){
for (int j=0; j<heightImg01; j++){
pixel1 = bfi.getRGB(i,j);
pixel2 = bfi2.getRGB(i, j);
img03[i][j] = pixel1 + pixel2;
}
}
bfi3 = desenha.setPixelEscalaDeCinza(img03);
//Ajustes de Imagem
Graphics g = bfi3.getGraphics();
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// Preenche o plano de fundo da pagina com branco
//g.setColor(Color.WHITE);
//g.fillRect(0, 0, totalwidth,totalHeigh);
g.fillRect(0,0, widthImg01, heightImg01);
g.drawImage(bfi3, 0, 0, null);
//g.drawImage(img02, widthImg01, 0, null);
//Exibe o resultado final
JFrame fr = new JFrame("Merge de imagens");
fr.getContentPane().setLayout(new BorderLayout());
JLabel jl = new JLabel(new ImageIcon(bfi3));
fr.getContentPane().add(jl,BorderLayout.CENTER);
fr.pack();
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setVisible(true);
}
}
A classe Desenha
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
public class Desenha {
public BufferedImage setPixelEscalaDeCinza(int[][] img03) {
int largura = img03.length;
int altura = img03[0].length;
BufferedImage image = new BufferedImage(largura, altura, BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = image.getRaster();
for (int h = 0; h < largura; h++) {
for (int w = 0; w < altura; w++) {
raster.setSample(h, w, 0, img03[h][w]);
}
}
return image;
}
}
PS: O código está bagunçado pq já mudei ele mtooo, mas isso corrijo dois!
Abraço e vlw
:)
