2 votes

Comment puis-je transformer une ImageIcon en un blob ?

J'ai stocké un Blob (fichier PNG) dans la base de données comme suit :

File file = new File( "image.png" );
FileInputStream fis = new FileInputStream( file );
statement.setBinaryStream( 1, fis, (int) file.length() );

Actuellement, j'utilise ce processus pour récupérer l'image Blob de la base de données et la reconvertir en image pour l'utiliser :

Blob blob = results.getBlob( 1 );
ImageIcon imageIcon = new ImageIcon( blob.getBytes( 1L, (int) blob.length() ) );

Cependant, j'ai besoin d'une méthode pour remettre l'image dans la base de données (après l'avoir modifiée) à partir de l'ImageIcon sans créer un fichier, le stocker sur le disque puis le relire avec le FileInputSteam.

modifier pour plus de clarté Supposons que l'image soit stockée dans une étiquette en tant qu'ImageIcon. La seule façon que je connaisse de la mettre dans la base de données est de la lire à partir d'un FileInputStream, mais cela impliquerait de créer inutilement un fichier de l'image. Alors comment puis-je lire l'image de l'ImageIcon en tant que flux binaire ou Blob dans la base de données ?

1voto

Alex Gitelman Points 15062

J'essaierais quelque chose comme ça

PixelGrabber pg = new PixelGrabber(imageIcon.getImage(),0,0, w,h,true);
pg.grabPixels();
// You may need to wait here until all pixels are copied (see ImageObserver)
Object buffer = pg.getPixels();

Voir http://download.oracle.com/javase/1.4.2/docs/api/java/awt/image/PixelGrabber.html

Vous devrez peut-être le modifier de manière appropriée et spécifier les bons w et h.

0voto

toto2 Points 3855

Dans l'API Blob :

setBinaryStream(long pos) renvoie un OutputStream

"Récupère un flux qui peut être utilisé pour écrire dans la valeur BLOB que cet objet Blob représente." Donc vous pouvez écrire vos bits directement dans ce flux.

Je ne suis pas sûr de savoir comment récupérer les pixels de votre version modifiée. ImageIcon . Si vous pouvez le lancer sur un BufferedImage cette classe a un getRGB méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X