Problemas em Recuperar Imagens de um BD Postgres

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

[code]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();  [/code]

Metodo 2

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

[code] BufferedImage buffer_imagem = ImageIO.read(pagina.getImagem());

        ImageIO.write(buffer_imagem, "JPG", new File("C:\\Users\\Dell001\\Documents\\ImagensGED\\"  
                                +"Pagina" + pagina.getNumero()+".jpg"));  [/code]

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.

[code] 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());  
  
        }  
  
    }  
}  [/code]

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

[code] 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;  
    }  [/code]

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