Comment récupérer un tableau des pixels d'un System::Drawing::Image

rgiud Messages postés 3 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 18 juillet 2008 - 16 juil. 2008 à 16:14
rgiud Messages postés 3 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 18 juillet 2008 - 18 juil. 2008 à 07:20
Bonjour,
Je développe un programme de traitement d'image et cherche à récupérer sous la forme d'une structure ou un buffer les pixels d'un System::Drawing::Image (la fonction GetPixel est trés lente).
Merci.

2 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
16 juil. 2008 à 21:59
Salut,
BitmapData et LockBits.

Bitmap img(L"uneImage.bmp");
BitmapData bmpData;
Rect rc(0, 0, img.GetWidth(), img.GetHeight());

if( img.LockBits(
            &rc, 
            ImageLockModeRead | ImageLockModeWrite,
            img.
            GetPixelFormat(), 
            &bmpData) == Ok )
{
   int stride  = bmpData.Stride;                      // pour calcul d'offset
   void* scan0 = bmpData.Scan0;                 // ptr debut data img
   byte* p = (byte*)(void*)scan0;                  // ptr sur bits

   int offset = stride - img.GetWidth() * 3;      // ligne suivante
   byte rouge, vert, bleu;                                // les primitives
    
   for(UINT y=0; y<img.GetHeight(); y++)
   {
      for(UINT x=0; x<img.GetWidth(); ++x)
      {
           bleu  = p[0]; 
           vert  = p[1]; 
           rouge = p[2];
           // pixel suivant
           p += 3;
       }
       // ligne suivante
       p += offset;
     }
  }
  img.UnlockBits(&bmpData);
}
0
rgiud Messages postés 3 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 18 juillet 2008
18 juil. 2008 à 07:20
Merci, votre code m'a mis sur la bonne voie.
0
Rejoignez-nous