Partage
  • Partager sur Facebook
  • Partager sur Twitter

Changer la couleur d'un pixel provenant d'un image

    11 juin 2013 à 15:33:28

    Bonjour, cherchant un moyen de transformer un pixel, je viens à vous pour que vous puissiez m'aider.


    J'ai une image A et j'ai réussi à récupérer le code couleur d'un des pixels, ce que je veux c'est pouvoir modifier un pixel d'une autre image (image B)


    on m'a parlé de drawrect , de uiview , de context enfin c'est un grand bazars dans ma tête. 

    Donc je voudrai savoir si quelqu'un pouvait m'aider 

    - Je vais vous donner le code me permettant de récupérer ma couleur, je voudrai savoir si vous pouviez m'expliquer ce que fait chaque ligne. 

       UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]];
            NSMutableArray *resultColor = [NSMutableArray array];
            
            CGImageRef imageRef = [img CGImage];
            
            NSUInteger width = CGImageGetWidth(imageRef);
            
            NSUInteger height = CGImageGetHeight(imageRef);
            
            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
            
            unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
            
            NSUInteger bytesPerPixel = 4;
            
            NSUInteger bytesPerRow = bytesPerPixel * width;
            
            NSUInteger bitsPerComponent = 8;
            
            CGContextRef context = CGBitmapContextCreate(rawData, width, height,
                                                         
                                                         bitsPerComponent, bytesPerRow, colorSpace,
                                                         
                                                         kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
            
            CGColorSpaceRelease(colorSpace);
            
            
            
            CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
            
            CGContextRelease(context);
            
            // Now your rawData contains the image data in the RGBA8888 pixel format.
            
            int byteIndex = (bytesPerRow * yp) + xp * bytesPerPixel;
            
            CGFloat red   = (rawData[byteIndex]     * 1.0) /255.0;
            
            CGFloat green = (rawData[byteIndex + 1] * 1.0)/255.0 ;
            
            CGFloat blue  = (rawData[byteIndex + 2] * 1.0)/255.0 ;
            
            CGFloat alpha = (rawData[byteIndex + 3] * 1.0) /255.0;
            
            byteIndex += 4;
            
            UIColor *bolor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
     
    

     EDITE : on me relisant je me suis rendu compte qu'il y avait un commentaire parlant du RGBA8888 .

    J'espère que vous pourrez éclairé ma lanterne ! :)

    -
    Edité par nirito12 14 juin 2013 à 16:27:54

    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2013 à 15:48:00

      Il faudrait une bibliothèque (Quartz) mais je ne suis pas sûr, si quelqu'un à des infos...

      -
      Edité par nirito12 12 juin 2013 à 15:50:37

      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2013 à 17:25:55

        je up et j'ai peut être trouvé la réponse mais je fais des test et j'espère que quelqu'un m'aidera :) .

        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2013 à 10:39:26

          J'ai déjà implémenté du traitement d'images sur Android.

          J'ai utilisé la bibliothèque OpenCV.

          Avec cette bibliothèque, il est facile de convertir une image en bitmap et un bitmap en matrice.

          Les valeurs de la matrice correspondent aux codes couleurs de chaque pixels et tu peux agir dessus. C'est très simple à mettre en oeuvre avec OpenCV (4 lignes).

          Le problème que tu risque de rencontrer et l'importation de la library mais des tutos existent :

          http://opencv.org/android

          -
          Edité par riventop 14 juin 2013 à 10:46:12

          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2013 à 10:46:42

            riventop a écrit:

            J'ai déjà implémenté du traitement d'images sur Android.

            J'ai utilisé la bibliothèque OpenCV.

            Avec cette bibliothèque, il est facile de convertir une image en bitmap et un bitmap en matrice.

            Les valeurs de la matrice correspondent aux codes couleurs de chaque pixels et tu peux agir dessus. C'est très simple à mettre en oeuvre avec OpenCV (4 lignes).

            Le problème que tu risque de rencontrer et l'importation de la library mais des tutos existent :

            http://opencv.willowgarage.com/wiki/Android

            Super

            Ah non en fait on est sur de l'Objective-C

            Quel est le soucis? Comprendre le code?

            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2013 à 10:51:31

              J'ai lu trop vite, j'ai cru que c'etait de l'Android :p

              Il me semble qu'il est possible de l'utiliser aussi sur iOS.

              Le problème est simplement l'importation de la labrary dans ton projet car c'est une library C++ à la base. Je me souviens avoir galérer une journée avant d'avoir enfin réussi à l'utiliser. Sinon elle est très puissante et de très haut niveau, une merveille à utiliser.

              Edit : A titre d'information, j'ai réussi à implémenter une reconnaissance d'image plutôt correcte en moins d'une centaine de ligne.

              -
              Edité par riventop 14 juin 2013 à 10:52:56

              • Partager sur Facebook
              • Partager sur Twitter
                14 juin 2013 à 13:55:27

                Donc je suis obligé d'utiliser une bibliothèque , haaaa!!! J'aurai préféré ne peux utiliser de bibliothèque . Holosmos, tu ne connais pas la solution ? :) en tous cas merci pour vos aides

                • Partager sur Facebook
                • Partager sur Twitter
                  14 juin 2013 à 14:31:27

                  Tout dépend de ce que tu appelles modifier, personnellement j'aurais fait un trompe l'oeil avec des rectangles tout petits que je superposerait à l'image mais évidemment ça ne modifie que l'apparence utilisateur et pas l'image.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 juin 2013 à 14:55:42

                    Holosmos : j'ai déjà eu cette idée mais quand je dois modifier plusieurs pixel en même temps,ce serait trop ( 100 images ...c'est trop xD ). J'avais aussi penser d'afficher l'image et faire une photo ensuite d'utiliser l'image qui serait dans le dossier photo mais se serait trop embêtant donc je cherche des alternatifs .

                    De tout façon, je viens de regarder l'utilisation du moteur graphique Quartz ( moi qui disait que c'était une librairie :p ) et je vais rchercher à modifier les pixels .

                    Merci en tout cas :)

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Changer la couleur d'un pixel provenant d'un image

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown