IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Convertir un ByteBuffer en un BufferedImage


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut Convertir un ByteBuffer en un BufferedImage
    Je suis un peux paumé dans les classes java pour les BufferedImage. J'ai récupéré un librairie assez performante pour décoder des images. Le seul ennui, c'est qu'ell décode dans un bytebuffer. Donc, en gros, j'ai un paquet de byte bruts qui représentent l"image décodée, en 0 on a les R du pixel 0,0, en 1 on a le G du pixel 0,0, etc etc, vous voyez l'idée.

    Et là je suis perdu, je n'arrive pas à comprendre comment passer de ça, à un bufferedImage.

    Quelqu'un a des indications à me donner, entre le ColorModel, le SambleModel, et DataBuffer, les banks, etc, je suis paumé sur ce que je dois faire.

    comment passer de mon ByteBuffer au format RGB à une BufferedImage RGB ?

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Salut Tchize_,

    Je ne sais pas si j'ai bien saisi ton problème et si ma solution est optimisée ou non.

    Mais ceci je pense devrait faire ce que je crois avoir compris que tu désires.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    import java.awt.Transparency;
    import java.awt.color.ColorSpace;
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.awt.image.ComponentColorModel;
    import java.awt.image.DataBuffer;
    import java.awt.image.DataBufferByte;
    import java.awt.image.Raster;
    import java.awt.image.WritableRaster;
    import java.io.File;
    import java.io.IOException;
    import java.nio.ByteBuffer;
     
    import javax.imageio.ImageIO;
     
     
    public class Snippet
    {
    	public static void main(String args[]) throws IOException, ClassNotFoundException
    	{
    		int width = 640, height = 480, bpp = 3;
     
    		// Ici je cree un buffer et je le remplis d'un beau degradé.
    		ByteBuffer buffer = ByteBuffer.allocate(width*height*bpp);
    		createImage(buffer, width, height);
     
    		DataBufferByte dbb = new DataBufferByte(buffer.array(), buffer.capacity());
    		WritableRaster raster = Raster.createInterleavedRaster(
    											dbb,
    											width, height,
    											width * bpp,
    											bpp, 
    											new int []{ 0, 1, 2 },
    											null);
     
    		 ColorModel colorModel =  new ComponentColorModel(
    								        	ColorSpace.getInstance(ColorSpace.CS_sRGB),
    								            new int[] { 8, 8, 8 },
    								            false,
    								            false,
    								            Transparency.OPAQUE,
    								            DataBuffer.TYPE_BYTE);
     
    		BufferedImage bfImage = new BufferedImage(colorModel, raster, false, null);
     
    		ImageIO.write(bfImage, "png", new File("output.png"));
     
    	}
     
    	/**
             * @param buffer
             * @param width
             * @param height
             */
    	private static void createImage(ByteBuffer buffer, int width, int height)
    	{
    		for (int i = 0; i < height; i++)
    		{
    			for (int j = 0; j < width; j++)
    			{
    				byte r = (byte)((float)j / (float)width * 255);
    				byte g = (byte)((float)i / (float)height * 255);
    				byte b = 0;//(float)i / (float)width * 255;
    				buffer.put(new byte[]{r,g,b});
    			}
    		}
    		buffer.rewind();
     
     
    	}
     
     
     
    }
    /**
     * 
     */
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Exactement ce que je cherchais, et environ 8% plus performant que le code que j'avais trouvé sur un blog, similaire

    Maintenant, faut que je fasse rentrer tout ça dans Batik

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir un BufferedImage vers ByteArray
    Par mimomimo dans le forum 2D
    Réponses: 2
    Dernier message: 26/03/2009, 06h29
  2. convertir BufferedImage en com.lowagie.text.Image;
    Par kenny6 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/06/2007, 17h11
  3. Convertir un tableau en BufferedImage
    Par ToTo13 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 06/06/2007, 23h50
  4. Réponses: 4
    Dernier message: 06/06/2004, 12h07
  5. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo