comment vous faites pour récupérer les pixels d'un objet Image et les stocker dans un byte[]?
(et vice versa si possible)
comment vous faites pour récupérer les pixels d'un objet Image et les stocker dans un byte[]?
(et vice versa si possible)
Dans un int[] plutot si tu veux envoyer l'image/bitmap telle qu'elle. Tout simplement avec la version longue de BufferedImage.getRGB(x, y, ...). Ou en itérant sur la taille de l'image et en utilisant la version courte de la méthode.
Pour un byte[] ca serait avec la forme compressée de l'image : sauvegarder l'image dans un fichier temporaire ou un ByteArrayOutputstream au format png et mettre le contenu de ce fichier/flux dans un byte[]. Sur le client utiliser le procédé inverse pour décoder l'image.
Le 2nd cas peut-être intéressant car la forme compressée de l'image prend nettement moins de place.
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
ok, j'avais deja testé avec getRGB mais bizzarement, ca me donne un tableau de 0.
Je comprend pas trop comment m'y prendre avec le ByteArrayInputStream.
Si t'as un exemple concret ca m'aiderai beaucoup
Aurais-tu mis scansize à 0 ? Pour une récupération complète de l'image : taille du tableau = h*w, offset = 0, scansize = w.ca me donne un tableau de 0.
Un truc comme ca (pas testé) :Si t'as un exemple concret ca m'aiderai beaucoup
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 import java.io.*; import javax.imageio.*; ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.writeImage(image, 'png", out); byte[] bytes = out.toByteArray();
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
write(RenderedImage im, String formatName, OutputStream output)
cela suppose que image est de type RenderedImage. Je n'ai qu'un simple objet java.awt.Image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ImageIO.writeImage(image, 'png", out);
ImageRendered est une interface, j'y comprend rien lol
un peu plus d'aide stp
Si ton image est une instance de BufferedImage ou de RenderedImage) alors => cast !
(Note : BufferedImage hérite de RenderedImage).
Sinon créer une nouvelle BufferedImage et recopier l'image originale dedans avec graphics.drawIlmage().
C'est pas bien dur !!!!![]()
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Une fonction vite-faite, pas optimisée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public static BufferedImage toBufferedImage(Image source) throws IllegalArgumentException { if (source == null) { return null; } else if (source instanceof BufferedImage) { return (BufferedImage) source; } int width = source.getWidth(null); int height = source.getHeight(null); if ((width <= 0) || (height <= 0)) { throw new IllegalArgumentException("Bad size !!!"); } // Si source a de la transparence utiliser TYPE_INT_ARGB à la place. BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // Inutile dans le cas d'images opaques : met le fond de l'image à la couleur transparente. /* for (int j = 0 ; j < height ; j++) { for (int i = 0 ; i < width ; i++) { result.setRGB(i, j, 0); } } */ Graphics graphics = result.createGraphics(); graphics.drawImage(source, 0, 0, null); graphics.dispose(); return result; }
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Partager