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

Apple Discussion :

Obtenir un tableau de couleurs à partir d'une image


Sujet :

Apple

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut Obtenir un tableau de couleurs à partir d'une image
    Bonjour,

    Je n'arrive pas à trouver la bonne méthode dans la doc. Avec une NSImageView, j'obtiens une image (NSImage). Que dois-je mettre pour obtenir un tableau de couleurs de façon à pouvoir utiliser cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float valHue, valSat, valBright, valAlph;
    [uneCouleur getHue:&valHue saturation:&valSat brightness:&valBright alpha:&valAlph];
    Je ne trouve pas comment faire un tableau, soit de pixels, soit de couleurs. J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NSColor *uneCouleur = [NSColor colorWithPatternImage:uneImage];
    mais évidemment, cela ne donne rien. Dans la console, je lis :

    2011-01-19 16:50:36.214 TestCoul[3961:a0f] *** -getHue:saturation:brightness:alpha: not defined for the NSColor NSPatternColorSpace <NSImage 0x100119c40 Size={1024, 768} Reps=(
    "NSBitmapImageRep 0x10016dcb0 Size={1024, 768} ColorSpace=sRGB IEC61966-2.1 colorspace BPS=8 BPP=32 Pixels=1024x768 Alpha=NO Planar=NO Format=0 CurrentBacking=<CGImageRef: 0x10016fde0> CGImageSource=0x10016b360"
    )>; need to first convert colorspace.
    L'image semble être détectée (j'ai utilisé Blind>Value> (NSImage *) uneImage; il semble que le lien Data ait été supprimé dans l'OS10.6, j'ai eu un avertissement en ce sens.

    Auriez-vous une idée s'il vous plaît?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut
    J'ai trouvé un code source :
    NSImageColorSeparation

    mais pour avoir du HSB? Toujours pas trouvé. C'est possible de le faire certainement, mais...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 163
    Points
    163
    Par défaut
    Je pense avoir progressé, j'en suis là :

    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
    - (IBAction) trouveLesCouleurs : (id) sender{
    	NSLog(@"trouveLesCouleurs");
    	NSSize tailleImage = [uneImage size];
    	
    	int
        pixelsWide = tailleImage.width,
        pixelsHigh = tailleImage.height;
    	NSLog(@"largeur = %d, hauteur = %d", pixelsWide, pixelsHigh);
    	
    	NSBitmapImageRep *bitmapRep = 
        [[NSBitmapImageRep alloc] 
    	 initWithBitmapDataPlanes: nil  // Nil pointer makes the kit allocate the pixel buffer for us.
    	 pixelsWide: pixelsWide  // The compiler will convert these to integers, but I just wanted to  make it quite explicit
    	 pixelsHigh: pixelsHigh //
    	 bitsPerSample: 8
    	 samplesPerPixel: 4  // Four samples, that is: RGBA
    	 hasAlpha: YES
    	 isPlanar: NO  // The math can be simpler with planar images, but performance suffers..
    	 colorSpaceName: NSCalibratedRGBColorSpace  // A calibrated color space gets us ColorSync for free.
    	 bytesPerRow: 0     // Passing zero means "you figure it out."
    	 bitsPerPixel: 32];  // This must agree with bitsPerSample and samplesPerPixel.
    	
    	NSInteger i, j;
    	for(i = 0; i < pixelsWide; i++){
    		for(j = 0; j < pixelsHigh; j++){
    			NSColor *uneCouleur = [bitmapRep colorAtX:i y:j];
    			[couleursFondEcran addObject:uneCouleur];
    			NSLog(@"i = %d, j = %d, R = %hi, G = %hi", i, j, [uneCouleur redComponent], [uneCouleur greenComponent]);
    			[uneCouleur release];
    		}
    	}
    }
    Mais à la console, c'est pas bon : je ne récupère que des valeurs nulles. Soit il me faut faire partir i et j ailleurs qu'à 0 (partent-ils de l'origine de l'image ou de l'écran pour l'instant?), soit mes "%hi" ne correspondent pas à des float, soit les méthodes ne sont pas les bonnes.

    D'après vous?

    En particulier, à la réflexion, je ne vois pas comment "uneImage" est intégrée dans "bitmapRep"... Je ne dois plus être très loin.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/01/2012, 23h20
  2. [String] Remplir un tableau de String à partir d'une boucle "for"
    Par dev197 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 12/08/2009, 15h29
  3. Réponses: 3
    Dernier message: 30/11/2008, 16h50
  4. obtenir un fichier .h a partir d'une dll existante
    Par backstage68 dans le forum Windows
    Réponses: 1
    Dernier message: 05/04/2007, 14h43
  5. Réponses: 5
    Dernier message: 15/03/2007, 18h44

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