ImagemFacil 1.0, um editor de imagens recheado de recursos
Publicado por Talvanes Ferreira de Sousa (última atualização em 07/06/2011)
[ Hits: 8.227 ]
Conheçam o ImagemFacil 1.0, um editor de imagens totalmente escrito em Java Swing, usando a máquina virtual OpenJDK6.0, uma implementação livre da plataforma Java oficial da Sun/Oracle. Ele foi desenvolvido como um trabalho de faculdade na disciplina de Processamento de Imagens e Computação Gráfica do curso de Engenharia da Computação. O ambiente de desenvolvimento utilizado foi o Eclipse, versão Helios.
/**
IMAGEM FACIL (ImagemFacil.java) - Esqueleto da janela do programa
*/
package imagemfacil;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.imageio.ImageIO;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
/**
* @author talba
*
*/
public class ImagemFacil extends JFrame{
private BufferedImage imagemEntrada, imagemSaida, imagemTrans;
private JToolBar brTransforma;
private JPanel pnlImagens, pnlBotoesAlfaCinza, pnlBotoes;
private JLabel lblImgEntrada, lblImgSaida;
private JButton btnCarregar, btnRecarregar, btnSalvar;
private JButton btnSetAlpha, btnTonsDeCinza, btnNegativo;
private JButton btnRotEsq, btnRotDir, btnEspVert, btnEspHoriz;
private JScrollPane pnlImgEntrada, pnlImgSaida;
private JCheckBox chkRed, chkGreen, chkBlue;
/**
* Construtor da classe ImagemFacil
*/
public ImagemFacil(){
this.initComponents();
}
/**
* Inicializa os componentes gráficos
*/
private void initComponents() {
// construir botões e itens gráficos
this.setTitle("ImagemFacil 1.0");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
//criação do painel e dos subpaineis das imagens
this.lblImgEntrada = new JLabel();
this.lblImgSaida = new JLabel();
this.pnlImgEntrada = new JScrollPane();
this.pnlImgEntrada.setViewportView(this.lblImgEntrada);
this.pnlImgSaida = new JScrollPane();
this.pnlImgSaida.setViewportView(this.lblImgSaida);
this.pnlImagens = new JPanel();
this.pnlImagens.setLayout(new GridLayout(1, 2));
this.pnlImagens.add(this.pnlImgEntrada);
this.pnlImagens.add(this.pnlImgSaida);
// caixas de transformação: tons de cinza e canais alfa RGB (red, green, blue)
this.chkRed = new JCheckBox("Vermelho");
this.chkRed.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
// canal RGB RED
}
});
this.chkGreen = new JCheckBox("Verde");
this.chkBlue = new JCheckBox("Azul");
this.btnSetAlpha = new JButton(new ImageIcon("./imagens/view-refresh.png"));
this.btnSetAlpha.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// canais alfa RGB
int altura = imagemTrans.getHeight();
int largura = imagemTrans.getWidth();
int cor[] = new int[3];
imagemSaida = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);
for(int y=0; y < altura; y++){
for(int x=0; x < largura; x++){
imagemTrans.getRaster().getPixel(x, y, cor);
if(!chkRed.isSelected()){
cor[0]=0;
}
if(!chkGreen.isSelected()){
cor[1]=0;
}
if(!chkBlue.isSelected()){
cor[2]=0;
}
imagemSaida.getRaster().setPixel(x, y, cor);
}
}
imagemTrans = imagemSaida;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
this.btnTonsDeCinza = new JButton("Tons de cinza");
this.btnTonsDeCinza.setSize(50, 30);
this.btnTonsDeCinza.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Tons de cinza para a imagem
int altura = imagemTrans.getHeight();
int largura = imagemTrans.getWidth();
int cor[] = new int[3]; // canais RGB (RED, GREEN, BLUE)
imagemSaida = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < altura; y++) {
for (int x = 0; x < largura; x++) {
imagemTrans.getRaster().getPixel(x, y, cor);
int grey = (cor[0] + cor[1] + cor[2]) / 3;
cor[2] = cor[1] = cor[0] = grey;
imagemSaida.getRaster().setPixel(x, y, cor);
}
}
imagemTrans = imagemSaida;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
this.btnNegativo = new JButton("Negativo");
this.btnNegativo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// filtro negativo
int altura = imagemTrans.getHeight();
int largura = imagemTrans.getWidth();
int cor[] = new int[3]; // canais RGB (RED, GREEN, BLUE)
imagemSaida = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < altura; y++) {
for (int x = 0; x < largura; x++) {
imagemTrans.getRaster().getPixel(x, y, cor);
cor[0]=255-cor[0];
cor[1]=255-cor[1];
cor[2]=255-cor[2];
imagemSaida.getRaster().setPixel(x, y, cor);
}
}
imagemTrans = imagemSaida;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
//botão para transformações RGB
this.pnlBotoesAlfaCinza = new JPanel();
this.pnlBotoesAlfaCinza.setLayout(new FlowLayout(FlowLayout.LEFT));
this.pnlBotoesAlfaCinza.add(this.btnTonsDeCinza);
this.pnlBotoesAlfaCinza.add(this.btnNegativo);
this.pnlBotoesAlfaCinza.add(Box.createRigidArea(new Dimension(25, 0)));
this.pnlBotoesAlfaCinza.add(this.chkRed);
this.pnlBotoesAlfaCinza.add(this.chkGreen);
this.pnlBotoesAlfaCinza.add(this.chkBlue);
this.pnlBotoesAlfaCinza.add(Box.createRigidArea(new Dimension(5, 0)));
this.pnlBotoesAlfaCinza.add(this.btnSetAlpha);
// barra vertical - botoes de transformação (rotação e espelhamento)
brTransforma = new JToolBar(JToolBar.VERTICAL);
brTransforma.setFloatable(true);
this.btnRotEsq = new JButton(new ImageIcon("./imagens/object-rotate-left.png"));
this.btnRotEsq.setToolTipText("Rotaciona 90° à esquerda");
this.btnRotEsq.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Algoritmo de rotação à esquerda
int altura = imagemTrans.getHeight();
int largura = imagemTrans.getWidth();
int cor[] = new int[3];
imagemSaida = new BufferedImage(altura, largura, BufferedImage.TYPE_INT_RGB);
for(int ye=0, x=0; x < altura; x++, ye++){
for(int y=largura-1, xe=0; y>=0; y--, xe++){
imagemTrans.getRaster().getPixel(xe, ye, cor);
imagemSaida.getRaster().setPixel(x, y, cor);
}
}
imagemTrans = imagemSaida;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
brTransforma.add(this.btnRotEsq);
this.btnRotDir = new JButton(new ImageIcon("./imagens/object-rotate-right.png"));
this.btnRotDir.setToolTipText("Rotaciona 90° à direita");
this.btnRotDir.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Algoritmo de rotação à direita
int altura = imagemTrans.getHeight();
int largura = imagemTrans.getWidth();
int cor[] = new int[3];
imagemSaida = new BufferedImage(altura, largura, BufferedImage.TYPE_INT_RGB);
for(int ye=0, x=altura-1; x>=0; x--, ye++){
for(int xe=0, y=0; y < largura; y++, xe++){
imagemTrans.getRaster().getPixel(xe, ye, cor);
imagemSaida.getRaster().setPixel(x, y, cor);
}
}
imagemTrans = imagemSaida;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
brTransforma.add(this.btnRotDir);
this.btnEspHoriz = new JButton(new ImageIcon("./imagens/object-flip-horizontal.png"));
this.btnEspHoriz.setToolTipText("Espelhamento horizontal");
this.btnEspHoriz.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Algoritmo de espelhamento horizontal
int altura = imagemTrans.getHeight();
int largura = imagemTrans.getWidth();
int cor[] = new int[3];
imagemSaida = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);
for(int y=0, ye=0; y < altura; y++, ye++){
for(int x=largura-1, xe=0; x>=0; x--, xe++){
imagemTrans.getRaster().getPixel(xe, ye, cor);
imagemSaida.getRaster().setPixel(x, y, cor);
}
}
imagemTrans = imagemSaida;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
brTransforma.add(this.btnEspHoriz);
this.btnEspVert = new JButton(new ImageIcon("./imagens/object-flip-vertical.png"));
this.btnEspVert.setToolTipText("Espelhamento vertical");
this.btnEspVert.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Algoritmo de espelhamento vertical
int altura = imagemTrans.getHeight();
int largura = imagemTrans.getWidth();
int cor[] = new int[3];
imagemSaida = new BufferedImage(largura, altura, BufferedImage.TYPE_INT_RGB);
for(int y=altura-1, ye=0; y>=0; y--, ye++){
for(int x=0, xe=0; x < largura; x++, xe++){
imagemTrans.getRaster().getPixel(xe, ye, cor);
imagemSaida.getRaster().setPixel(x, y, cor);
}
}
imagemTrans = imagemSaida;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
brTransforma.add(this.btnEspVert);
// botões de função: abrir, recarregar e salvar
this.btnCarregar = new JButton("Carregar");
this.btnCarregar.setSize(new Dimension(50, 30));
this.btnCarregar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Carrega arquivo de imagem
JFileChooser seletor = new JFileChooser();
int resposta = seletor.showOpenDialog(pnlBotoes);
try{
if (resposta == 0){
imagemEntrada = ImageIO.read(seletor.getSelectedFile());
ImageIcon ie = new ImageIcon(imagemEntrada);
lblImgEntrada.setIcon(ie);
imagemTrans = imagemEntrada;
}
}catch(Exception ex){
JOptionPane.showMessageDialog(null, "Impossível carregar imagem " + seletor.getSelectedFile().getAbsolutePath());
}
}
});
this.btnSalvar = new JButton("Salvar");
this.btnSalvar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// Salva a imagem editada
}
});
this.btnRecarregar = new JButton("Desfazer formatação");
this.btnRecarregar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// reinicia as imagens para como foram anteriormente
imagemSaida = imagemTrans = imagemEntrada;
ImageIcon i = new ImageIcon(imagemSaida);
lblImgSaida.setIcon(i);
}
});
this.pnlBotoes = new JPanel(new FlowLayout(FlowLayout.TRAILING));
this.pnlBotoes.add(this.btnCarregar);
this.pnlBotoes.add(Box.createRigidArea(new Dimension(5, 0)));
this.pnlBotoes.add(this.btnSalvar);
this.pnlBotoes.add(Box.createRigidArea(new Dimension(40, 0)));
this.pnlBotoes.add(this.btnRecarregar);
//layout final
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(this.pnlImagens, BorderLayout.CENTER);
this.getContentPane().add(this.pnlBotoesAlfaCinza, BorderLayout.NORTH);
this.getContentPane().add(this.brTransforma, BorderLayout.EAST);
this.getContentPane().add(this.pnlBotoes, BorderLayout.SOUTH);
this.setLocationRelativeTo(null);
this.pack();
// fim de itens gráficos
}
}
/**
FIM DO IMAGEM FACIL (ImagemFacil.java)
*/
/**
IMAGEM FACIL (Main.java) - O código principal, responsável por exibir a janela gráfica
*/
import imagemfacil.ImagemFacil;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ImagemFacil frame = new ImagemFacil();
frame.setVisible(true);
}
}
/**
FIM DO IMAGEM FACIL (Main.java)
*/
Copia de um arquivo para outro
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (9)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)
O programa assinador digital (1)









