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.116 ]
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) */
Ordenação crescente e decrescente
Escrevendo num arquivo em java
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Quebra de linha na data e hora no Linux Mint
Organizando seus PDF com o Zotero
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (8)
Problema com Conexão Outlook via Firewall (OpenSUSE) com Internet Fibr... (5)