Problemas em Recuperar Imagens de um BD Postgres

0 respostas
P

Ola,

Tenho imagens inseridas em um BD Postgres, ela está inserida no formato inputStream, porem ao busca-la no banco e tranforma-la em imagem novamente a mesma fica incompleta,ou,seja apenas um pequeno pedaço da imagem aparece, a dimensão da imagem é normal, porem apenas um pedaço efetivo da imagem aparece o "resto" eh apenas "cinza".

Tentei 2 metodoa diferentes mas os 2 retornam a mesma imagem cortada.

Metodo 1

InputStream is = pagina.getImagem();  
       byte[] buffer = null;         
       buffer = new byte[is.available()];  
       is.read(buffer);  
       is.close();  
      
             FileOutputStream fos = new FileOutputStream("C:\\Users\\Dell001\\Documents\\ImagensGED\\"  
                                +"Pagina" + pagina.getNumero()+".jpg");  
           fos.write(buffer);  
           FileDescriptor fd = fos.getFD();  
           fos.flush();  
           fd.sync();  
           fos.close();

Metodo 2

Aqui transformei o inputStrem em um bufferedImage, como um amigo me orientou mas tb nao funcionou

BufferedImage buffer_imagem = ImageIO.read(pagina.getImagem());  
              
            ImageIO.write(buffer_imagem, "JPG", new File("C:\\Users\\Dell001\\Documents\\ImagensGED\\"  
                                    +"Pagina" + pagina.getNumero()+".jpg"));

As duas maneiras funcionam, porém da maneira q descrevi acima, aparece apenas um pedacinho da imagem em sí o resto tudo cinza.

Segue o metodo que inicializa um scanner e "pega" a imagem escaneada.
package br.com.ns2e.ged.scanner;  
      
    import br.com.ns2e.ged.modelo.Pagina;  
    import ij.IJ;  
    import ij.ImagePlus;  
    import java.awt.Rectangle;  
    import java.awt.image.BufferedImage;  
    import java.io.ByteArrayInputStream;  
    import java.io.ByteArrayOutputStream;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.util.logging.Level;  
    import java.util.logging.Logger;  
    import javax.imageio.ImageIO;  
    import javax.swing.JButton;  
    import javax.swing.JFrame;  
    import javax.swing.JPanel;  
    import uk.co.mmscomputing.device.scanner.Scanner;  
    import uk.co.mmscomputing.device.scanner.ScannerDevice;  
    import uk.co.mmscomputing.device.scanner.ScannerIOException;  
    import uk.co.mmscomputing.device.scanner.ScannerIOMetadata;  
    import uk.co.mmscomputing.device.scanner.ScannerListener;  
    import javax.swing.WindowConstants;  
      
    public class ScannerGed extends JFrame implements ScannerListener {  
      
        private static final long serialVersionUID = 1L;  
        private JPanel jContentPane = null;  
        private JButton jButton = null;  
        private JButton jButton1 = null;  
        private Scanner scanner;  
        private Pagina pagina;  
        private BufferedImage img;  
      
        public ScannerGed(Pagina pag) {  
      
            super();  
            this.setVisible(true);  
            initialize();  
            pagina = pag;  
            try {  
                scanner = Scanner.getDevice();  
                scanner.addListener(this);  
            } catch (Exception e) {  
      
                e.printStackTrace();  
            }  
        }  
      
        private void initialize() {  
            this.setSize(300, 120);  
            this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);  
            this.setResizable(false);  
            this.setContentPane(getJContentPane());  
            this.setTitle("Scaneamento");  
            this.addWindowListener(new java.awt.event.WindowAdapter() {  
      
                public void windowClosing(java.awt.event.WindowEvent e) {  
                }  
            });  
        }  
      
        private JPanel getJContentPane() {  
            if (jContentPane == null) {  
                jContentPane = new JPanel();  
                jContentPane.setLayout(null);  
                jContentPane.add(getJButton(), null);  
                jContentPane.add(getJButton1(), null);  
            }  
            return jContentPane;  
        }  
      
        private JButton getJButton() {  
            if (jButton == null) {  
                jButton = new JButton();  
                jButton.setBounds(new Rectangle(4, 16, 131, 42));  
                jButton.setText("Escolha o Dispositivo");  
                jButton.addActionListener(new java.awt.event.ActionListener() {  
      
                    public void actionPerformed(java.awt.event.ActionEvent e) {  
                        if (scanner.isBusy() == false) {  
                            selectDevice();  
                        }  
      
                    }  
                });  
            }  
            return jButton;  
        }  
      
        private JButton getJButton1() {  
            if (jButton1 == null) {  
                jButton1 = new JButton();  
                jButton1.setBounds(new Rectangle(160, 16, 131, 42));  
                jButton1.setText("Scaneamento");  
                jButton1.addActionListener(new java.awt.event.ActionListener() {  
      
                    public void actionPerformed(java.awt.event.ActionEvent e) {  
      
                        getScan();  
      
                    }  
                });  
            }  
      
            return jButton1;  
        }  
      
        public void selectDevice() {  
      
            try {  
                scanner.select();  
            } catch (ScannerIOException e1) {  
                IJ.error(e1.toString());  
            }  
      
        }  
      
        public void getScan() {  
      
            try {  
                scanner.acquire();  
      
            } catch (ScannerIOException e1) {  
                IJ.showMessage("Acesso negado: Dispositivo em uso");  
      
      
            }  
      
        }  
      
        public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata) {  
            // System.out.println("nao foi");  
            if (type.equals(ScannerIOMetadata.ACQUIRED)) {  
                //   System.out.println("foi");  
                ImagePlus imp = new ImagePlus("Scaneamento", metadata.getImage());  
                img = imp.getBufferedImage();  
      
      
      
      
                ByteArrayOutputStream buff_bytes = new ByteArrayOutputStream();  
                try {  
                    ImageIO.write(img, "jpg", buff_bytes);  
      
      
                    buff_bytes.flush();  
      
      
                    byte[] imagem_byte = buff_bytes.toByteArray();  
                    // byte[] bytes = /* use seu método que converte BufferedImage em byte[] */ ;  
                    InputStream input = new ByteArrayInputStream(imagem_byte);  
                    System.out.println(imagem_byte);  
                    pagina.setImagem(input);  
                    buff_bytes.close();  
      
                    this.dispose();  
      
                } catch (IOException ex) {  
                    Logger.getLogger(ScannerGed.class.getName()).log(Level.SEVERE, null, ex);  
                }  
      
      
      
      
      
      
            } else if (type.equals(ScannerIOMetadata.NEGOTIATE)) {  
                ScannerDevice device = metadata.getDevice();  
                try {  
                    device.setResolution(100);  
                } catch (ScannerIOException e) {  
                    IJ.error(e.getMessage());  
                }  
      
            } else if (type.equals(ScannerIOMetadata.STATECHANGE)) {  
                // IJ.error(metadata.getStateStr());  
            } else if (type.equals(ScannerIOMetadata.EXCEPTION)) {  
                IJ.error(metadata.getException().toString());  
      
            }  
      
        }  
    }

E aqui um trecho do metodo que salva esta imagem no banco.

private int incluir(br.com.ns2e.ged.modelo.Pagina pagina) throws SQLException {  
            int linhas_afetadas = 0;  
            String texto_sql = "INSERT INTO .... "  
                    + "(documento, numero, imagem)"  
                    + " VALUES (?, ?, ?)";  
      
            PreparedStatement comando = conexao.prepareStatement(texto_sql);  
      
            comando.setInt(1, pagina.getDocumento().getId());  
      
            comando.setInt(2, pagina.getNumero());  
      
            comando.setBinaryStream(3, pagina.getImagem(), 1024);  
            try {  
                comando.execute();  
            } catch (Exception e) {  
      
                System.out.println(e);  
      
            }  
      
            linhas_afetadas = comando.getUpdateCount();  
      
            return linhas_afetadas;  
        }

As imagens geradas sae sempre assim, as vezes um pouquinho menos ou um pouquinho mais,
mas sempre apenas ali no topo.

[img]http://img11.imageshack.us/img11/8066/pagina1gg.jpg[/img]

Criado 24 de maio de 2011
Respostas 0
Participantes 1