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 .... ele ate compila, mas quando eu clico no botao logar na classe Login pra poder entrar na classe Janela, aparece uns erros.
Tenho varias classes ... mas vou colocar as duas que estão doidas :lol: : a classe Janela e PanelImagem ...
A classe Janela exibe a janela principal do programa e a classe PanelImagem faz com que a imagem fique na resolução certa exigida pelo programa e que seja exibida nele. E mais uma coisa: a classe Janela nao tem main, pois está instanciada em uma outra classe ok ?
Nao vou colocar o codigo inteiro, pois é muito grande. Entao, eu tirei a parte dos metodos das açoes dos jmenu's ok ? so deixei a do abrir ...
Os problemas estão la no comentario que deixei ... pra especificar, estou com problemas no PlanarImage e na variavel panimg na classe Janela. E na classe PanelImagem, estou com problema no DisplayJAI ... olhem la e me ajudem!
A classe Janela:
public class Janela extends JFrame {
private JFileChooser fc;
private PanelImagem panimg;
static JProgressBar progressBar;
private String img = "";
private PlanarImage pi = JAI.create("fileload", img); //PROBLEMA AQUI!
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 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);
}
}
);
arquivo.add(abrir);
JMenuBar menu = new JMenuBar();
setJMenuBar(menu);
menu.add(arquivo);
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");
}
getContentPane().add(tabs);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_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;
}
}
