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 :

BufferedImage et accès plus direct aux pixels


Sujet :

AWT/Swing Java

  1. #1
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut BufferedImage et accès plus direct aux pixels
    Bonjour,

    Savez-vous s'il y a un moyen d'accèder au pixels d'une BufferedImage sans qu'il n'y ait de copie de données quelque part.

    J'aurais besoin d'optimiser certains traitements, ne travaillant que sur des images de type 32 bits, ARGB ou RGB, je me demandais s'il n'y avait pas un moyen d'optimiser les accès.

    En effet, en passant par des lecteurs blocs par blocs (exemple : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	static public int[] getRGB(BufferedImage image, int x, int y, int width,
    			int height, int pixels[]) {
    		int type = image.getType();
    		//dans le cas RGB ou ARGB, on peut récuperer directement les bonnes
    		// valeurs du Raster
    		if (type == BufferedImage.TYPE_INT_RGB || type == BufferedImage.TYPE_INT_ARGB)
    			return (int[]) (int[]) image.getRaster().getDataElements(x, y,
    					width, height, pixels);
    		else
    			return image.getRGB(x, y, width, height, pixels, 0, width);
    	}
    La récuperation des données mettent bien 1sec (en cumulée ligne par ligne) sur une photo de taille 4200*3000.

    Du coup, mon opérateur de traitement met désormais moins de temps que les copies.

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    En fait, ça semble possible, en outrepassant le SampleModel via :

    BufferedImage#getRaster()#getDataBuffer().

    Par contre, il faut voir quel est le SampleModel pour savoir si les pixels sont stockés par bande, entrelacés etc.

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Si l'image est de type TYPE_INT_RGB. Le SampleModel est de type : SinglePixelPackedSampleModel.


    On peut donc facilement récuperer le tableau de pixels via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataBufferInt dataBuffer = (DataBufferInt) input.getRaster().getDataBuffer();
    int[] pixels = dataBuffer.getData();

    Pour les images de type TYPE_3BYTE_BGR (ce qui est le cas pour les photos en général). Le SampleModel est PixelInterleavedSampleModel et le DataBuffer est de type DataBufferByte.

    Les couleurs R,G,B sont accessibles via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int pos = "la position qu'on veut"
     
    DataBufferByte bytes = (DataBufferByte) im.getRaster().getDataBuffer();
    byte[] buffer= bytes.getData();
     
    byte r = buffer[pos+2];
    byte g = buffer[pos+1];
    byte b = buffer[pos];

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

Discussions similaires

  1. Interdire l'acces directe aux fichiers php
    Par Never dans le forum Apache
    Réponses: 4
    Dernier message: 04/12/2006, 21h00
  2. htaccess : interdire l'accès direct aux fichiers php
    Par Cédricss dans le forum Apache
    Réponses: 5
    Dernier message: 08/10/2006, 11h29
  3. Réponses: 15
    Dernier message: 05/09/2006, 16h10
  4. acces aux pixels d'une image
    Par bassidi meryeme dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/10/2005, 11h20
  5. [TOMCAT] Comment empêcher l'accès direct aux fichiers
    Par thomine dans le forum Tomcat et TomEE
    Réponses: 17
    Dernier message: 14/04/2005, 10h19

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