Problemas sérios

0 respostas
JamesBond

Olá pessoal, blz aew ?

Bem, estou fazendo um trabalho pra matéria de Processamento Digital de Imagens … o professor mandou a gente fazer uma aplicação que abra uma imagem e que realize escala de cinza nela … entao, até ai tudo bem … eu tava programando tranquilo, compilava, o programa executava normalmente … fazia escala de cinza e tudo mais … ate ai blz … ai de repente ele parou de funcionar … vou explicar melhor: Tenho varias classes … mas vou colocar as duas que estão doidas :lol: : a classe Janela e PanelImagem … e as duas estao “conectadas” entre elas …

A classe Janela exibe a janela principal do programa e a classe PanelImagem faz com que a imagem seja exibida no programa. E mais uma coisa: a classe Janela nao tem main, pois está instanciada em uma outra classe ok ? :wink:
Nao vou colocar o codigo inteiro, pois é muito grande. Entao, eu tirei a parte dos metodos das açoes de alguns jmenu ok ?

O problema está la no comentario que deixei … olhem la e me ajudem!

A classe Janela:

package janela;

import procImagem.BotaoProc;

import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.*;
import javax.swing.border.TitledBorder;

import abrir.ImageFilter;
import abrir.ImagePreview;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.net.URL;

import login.LoginMain;

public class Janela extends JFrame {
	
	private static final long serialVersionUID = 1L;
	private JFileChooser fc;
	private PanelImagem panimg;
	static JProgressBar progressBar;
	private String img = "";
	private PlanarImage pi = JAI.create("fileload", img);
	BotaoProc c = new BotaoProc(img, pi);
	JLabel p = new JLabel();
	
	public Janela() {
		
		setTitle("Aplicação Exemplo");
		
		JMenu arquivo = new JMenu("Arquivo");
		arquivo.setIcon(new ImageIcon("Imagens/sobre.png"));
		JMenuItem novo = new JMenuItem("Novo  'n'");
		novo.setMnemonic('n');
		
		JMenuItem abrir = new JMenuItem("Abrir  'a'");
		abrir.setMnemonic('a');
		abrir.setIcon(new ImageIcon("Imagens/fileopen.png"));
		abrir.addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent event) {
						 
						 if (fc == null) {
							 fc = new JFileChooser();
							 
				           //Adiciona um filtro de arquivos próprio(Apenas Imagens) e desabilita  
				           //o padrão (Aceitar Todos os arquivos) 
							 fc.addChoosableFileFilter(new ImageFilter());
							 fc.setAcceptAllFileFilterUsed(false);

				           //Adiciona ícones padrão para diferentes tipos de arquivos(JPEG,GIF..).
			               // filechooser.setFileView(new ImageFileView());
							 
				           //Adiciona a janela de preview(visualização de imagem).
							 fc.setAccessory(new ImagePreview(fc));
			                 
			              }

			              int returnVal = fc.showDialog(Janela.this,"Abrir"); 
			                
			              if (returnVal == JFileChooser.APPROVE_OPTION) {
			            	  File file = fc.getSelectedFile();
			                  panimg.setImagem(file.getAbsolutePath());
			                  p.setIcon(panimg.getLayout());
			                  p.setPreferredSize(new Dimension(680,680));
			                  p.repaint();   //atualiza o JLabel com a imagem selecionada
			                  
			                  if(file != null) {
			                    	PlanarImage pi2= JAI.create("fileload",file.getAbsolutePath());
			                    	c.setImagem(pi2,file.getAbsolutePath());
			                    }
			                }
			      	        
			                fc.setSelectedFile(null);
					 }
				}
		);
		
		JMenuItem salvarim = new JMenuItem("Salvar imagem 'k'");
		salvarim.setMnemonic('k');
		salvarim.setIcon(new ImageIcon("Imagens/filesave.png"));
		
		JMenuItem logoff = new JMenuItem("Logoff  'l'");
		logoff.setMnemonic('i');
		logoff.setIcon(new ImageIcon("Imagens/logoff.jpg"));		
		
		JMenuItem sair = new JMenuItem("Sair");
		sair.setMnemonic('i');
		sair.setIcon(new ImageIcon("Imagens/exit.png"));

    	        JMenu ajuda = new JMenu("Help");
		JMenuItem sobre = new JMenuItem("Sobre  'o'");
		sobre.setMnemonic('o');
		sobre.setIcon(new ImageIcon("Imagens/info.png"));

		ajuda.add(sobre);

		arquivo.add(novo);
		arquivo.add(abrir);
		arquivo.add(salvarim);
		arquivo.addSeparator();
		arquivo.add(logoff);
		arquivo.addSeparator();
		arquivo.add(sair);

		JMenuBar menu = new JMenuBar();
		setJMenuBar(menu);
		menu.add(arquivo);
		menu.add(ajuda);
		
		Informacoes c1 = new Informacoes();
		Observacoes c2 = new Observacoes();
		BotaoProc bp  = new BotaoProc(img, pi);
		
		JPanel painelCentral = new JPanel(new BorderLayout()); 
	        JPanel painelInferior = new JPanel(new FlowLayout()); 

	    TitledBorder tituloImagem;
	    tituloImagem = BorderFactory.createTitledBorder("Imagem");
	    
	    JTabbedPane tabs = new JTabbedPane();

	    panimg = new PanelImagem(img);           //O PROBLEMA ESTÁ AQUI!
            panimg.setImagem(img);                       //AQUI TAMBEM
	    p.setIcon(panimg.getLayout());                // AQUI A MESMA COISA
	    p.setPreferredSize(new Dimension(680, 680));
	    
	    JPanel painelImagem = new JPanel();
	    painelImagem.setPreferredSize(new Dimension(200, 200));
	    painelImagem.setBorder(tituloImagem);
	    painelImagem.add(p);
	    
	    painelCentral.add(painelImagem,BorderLayout.CENTER);
	    
	    painelCentral.add(painelInferior,BorderLayout.SOUTH);
	    
	    TitledBorder tituloBot;
	    tituloBot = BorderFactory.createTitledBorder("Processamento de Imagens");
	    
	    JPanel painelBotao = new JPanel();
	    painelBotao.setPreferredSize(new Dimension(250, 200));
	    painelBotao.setBorder(tituloBot);
	    painelBotao.add(bp.getLayout());
	    
	    painelInferior.add(painelBotao);

        TitledBorder tituloInf;
	    tituloInf = BorderFactory.createTitledBorder("Informações");

	    JPanel painelInformacoes = new JPanel();
	    painelInformacoes.setPreferredSize(new Dimension(300, 200));
	    painelInformacoes.setBorder(tituloInf);
	    painelInformacoes.add(c1.getLayout());
	    
	    painelInferior.add(painelInformacoes);

	    JPanel painelObservacoes = new JPanel();
	    painelObservacoes.add(c2.getLayout());
	    
	    tabs.addTab("Aba 1", painelCentral);

	    JPanel pa = new JPanel();
	    JLabel la = new JLabel("teste");
	    pa.add(la);
	    tabs.addTab("Aba 2", pa);
	    
	    tabs.addTab("Relatório", painelObservacoes);
	    
        try {
        	UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            SwingUtilities.updateComponentTreeUI(this);
        }
        catch (Exception e) {
            System.out.println("Erro de Interface");
        }
        
        addWindowListener(
        	 new WindowListener() {
        			public void windowClosing(WindowEvent e) {
    					Object[] opts = {"Sim", "Não"};
    					int op;
    				
    					op = JOptionPane.showOptionDialog(null, "Deseja sair do aplicativo ?", "Processamento de Imagens",
    							JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, opts, opts[0]);
    				
    					if (op == 0)
    						System.exit(0);
        			}
        			public void windowActivated(WindowEvent e) { }
        			public void windowClosed(WindowEvent e) { }
        			public void windowDeactivated(WindowEvent e) { }
        			public void windowDeiconified(WindowEvent e) { }
        			public void windowIconified(WindowEvent e) { }
        			public void windowOpened(WindowEvent e) { }
        	 }
        );
        
        getContentPane().add(tabs);
     	setLocationRelativeTo(null);
     	setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
     	this.setExtendedState(JFrame.MAXIMIZED_BOTH);
	}
	
	public void visivel() {
		this.setVisible(true);
	}
 }

Agora a classe PanelImagem

package janela;

import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import com.sun.media.jai.widget.DisplayJAI;

public class PanelImagem {
	
	JScrollPane spane = new JScrollPane();
	private JLabel limagem = new JLabel();
	private PlanarImage principal;
	private DisplayJAI dj;
	ImageIcon icon;
	BufferedImage b;
	
	public PanelImagem(String imagem) {
		
		principal = JAI.create("fileload",imagem);
		dj = new DisplayJAI(principal);                    //PROBLEMA AQUI!!!
		dj.setPreferredSize(new Dimension(660, 660));
		JPanel p = new JPanel();
		p.add(dj);
		limagem.add(dj);
		icon = new ImageIcon(imagem);
		icon = ajustaTam(icon);
	}

	public ImageIcon getLayout() {
		return icon;
	}
	
	public DisplayJAI setImagem(String img) {
		
		PlanarImage aux = JAI.create("fileload",img);
		b = aux.getAsBufferedImage();
		icon = new ImageIcon(img);
		icon = ajustaTam(icon);
		principal = aux;
		aux.dispose();
		dj.setPreferredSize(new Dimension(800, 800));
		dj.set(principal);
		dj.getHeight();
		return dj;
	}

	public ImageIcon ajustaTam(ImageIcon imagem){
		
		ImageIcon novaImagem = null;
		int flag=0;
		
		if(imagem.getIconHeight() < imagem.getIconWidth()){
			flag=1;
		}
		else
			if(imagem.getIconHeight() >= imagem.getIconWidth()){
				flag=2;
			}
		switch(flag) {
			case 0:
				novaImagem = new ImageIcon(imagem.getImage());
			break;
			case 1:
				if(imagem.getIconWidth() > 660)
				{
				    System.out.println("maior altura");
				    float y = (float) imagem.getIconWidth()/660;
				    System.out.println(y+"="+imagem.getIconWidth()+"/ 660");
					float x = (float) imagem.getIconHeight()/y;
					System.out.println(x+"="+imagem.getIconHeight()+"/"+y);
					System.out.println("\n resultado:"+y+"tamanho x 660"+",y"+x);
					novaImagem = new ImageIcon(
							imagem.getImage().getScaledInstance(660,(int) x,Image.SCALE_DEFAULT)
							);
				 }
				else
					novaImagem = new ImageIcon(imagem.getImage());
			break;
			case 2:
				if(imagem.getIconHeight() > 660)
				{
					System.out.println("maior altura");						                		
				    float y = (float) imagem.getIconHeight()/660;
				    System.out.println(y+"="+imagem.getIconHeight()+"/ 660");
					float x =(float) imagem.getIconWidth()/y;
					System.out.println(x+"="+imagem.getIconWidth()+"/"+y);
					System.out.println("\n resultado:"+y+"tamanho x"+x+",y 660");
					novaImagem=new ImageIcon(
							imagem.getImage().getScaledInstance((int) x,660,Image.SCALE_DEFAULT)
						);
					}
				else
					novaImagem = new ImageIcon(imagem.getImage());
			break;
		}
		return novaImagem;
	}
	
	public ImageIcon getPlanarImage() {
		return icon;
	}
}
Criado 13 de março de 2008
Respostas 0
Participantes 1