Problemas no PlanarImage e para abrir a imagem com a resolução certa!

6 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 .... 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;   
    }   
}

6 Respostas

JamesBond

parece que ninguém sabe :cry:

wilcorrea

Então…Ví agora aqui seu código…

Parece que vc está usando aquele jar (JAI) para tratar imagens e tem algumas classes suas que são chamadas nesses dois arquivos que não estão aqui…
Está muito dificil saber qual erro pode estar acontecendo, até porque não é uma aplicação tão trivial assim…

Se puder ou quiser upar seu projeto em algum lugar pra gente poder dar um import nele e ver se pode ajudar sseria bem mais fácil…

Por exemplo:

private PlanarImage pi = JAI.create("fileload", img);   //PROBLEMA AQUI! ??

Não sei se vc reparou mas esse erro:

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));

E esse:

public PanelImagem(String imagem) {     
              
         principal = JAI.create("fileload",imagem);     
         dj = new DisplayJAI(principal);   //PROBLEMA AQUI!!!

São a mesma coisa…
Essa classe DisplayJAI é sua?? O problema pode estar por ai…não me parace ser problema no PlanarImage não…

Valeu
[]'s

JamesBond

wilcorrea:
Então…Ví agora aqui seu código…

Parece que vc está usando aquele jar (JAI) para tratar imagens e tem algumas classes suas que são chamadas nesses dois arquivos que não estão aqui…
Está muito dificil saber qual erro pode estar acontecendo, até porque não é uma aplicação tão trivial assim…

Se puder ou quiser upar seu projeto em algum lugar pra gente poder dar um import nele e ver se pode ajudar sseria bem mais fácil…

Por exemplo:

private PlanarImage pi = JAI.create("fileload", img);   //PROBLEMA AQUI! ??

Não sei se vc reparou mas esse erro:

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));

E esse:

public PanelImagem(String imagem) {     
              
         principal = JAI.create("fileload",imagem);     
         dj = new DisplayJAI(principal);   //PROBLEMA AQUI!!!

São a mesma coisa…
Essa classe DisplayJAI é sua?? O problema pode estar por ai…não me parace ser problema no PlanarImage não…

Valeu
[]'s

meu Deus! uma esperança! aiuehaieuhauiea
entao cara, eu arrumei umas coisas no meu codigo, deixando menos poluido … mas mesmo assim, alguns problemas persistem … principalmente para abrir a imagem …
se vc quiser olhar meu codigo, é bem grande viu … e um pouco confuso … eu posso mandar por email …

abraços

wilcorrea

Te mandei um MP com meu e-mail…

Valeu

AndressaF

Aproveitando o enredo, boa noite a todos.
Gostaria de saber se possuem dicas pra me ajudar a resolver um probleminha.

Preciso aplicar algumas funções em uma imagem. Mas pra web. Ja desenvolvi a parte de upload e salvo a imagem no banco, e ja a recupero no seu formato original.
A principio tentei aplicar uma função da api Jai à imagem:

int kernelTamanho = 15;
		float[] kernelMatriz = new float[kernelTamanho*kernelTamanho];
		for(int k=0;k<kernelMatriz .length;k++)
		kernelMatriz[k] = 1.0f/(kernelTamanho*kernelTamanho);
		KernelJAI kernel = new KernelJAI(kernelTamanho,kernelTamanho,kernelMatriz);
		PlanarImage imagemProcessada = JAI.create("convolve", bytes, kernel);

Mas nao consigo pensar em meios de transformar essa planarImage pra poder exibi-la depois de processada na pagina em xhtml.
Se o software for pra desktop consigo aplicar as funções com PlanarImage a um displayJai, mas pra web nao consigo pensar em meios de passar a exibi-la.
Alguem tem alguma ideia?!
Obrigada

wilcorrea

Andressa,

Creio que nesse caso você tenha a opcão de usar tags html, sendo assim pode usar a tag img para exibir a imagem. Você pode salvar a imagem no servidor e apontar a propriedade src da tag para o caminho da imagem ou converter a imagem para base64 e colocar o código gerado nesta mesma propriedade.

Criado 13 de março de 2008
Ultima resposta 16 de fev. de 2013
Respostas 6
Participantes 3