SCANLINE Comment ça marche ? [?]

cs_FLOX Messages postés 3 Date d'inscription dimanche 24 février 2002 Statut Membre Dernière intervention 28 mars 2002 - 28 mars 2002 à 18:31
cs_athomas Messages postés 4 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 19 février 2008 - 19 févr. 2008 à 16:40
Bonjour à tous,
Quelqu'un pourrais t-il m'expliquer comment marche ScanLine. Ce qu'il faut lui passer et ce qu'il renvoi.
On m'a dit d'utiliser cette fonction pour balayer mon image afin de détecter un rond blanc.
Si quelqu'un avait un source d'exemple il sera le bien venu.
merci d'avance à vous tous.

4 réponses

chasse18 Messages postés 51 Date d'inscription mercredi 1 décembre 2004 Statut Membre Dernière intervention 10 juin 2005 1
26 avril 2005 à 10:53
j'étudie en ce moment le probleme pour comparer deux images jpeg que je
transforme en bmp pour utiliser la fonction scanline, il semblerai
d'après mes recherches que cette fonction s'utilise de la manière
suivante int i_y = pBitmap->ScanLine[y]; et ensuite i_y[i_x] pour
parcourrir les x.

Voila ce que je sais pour l'instant mais c'est en phase de test.

Chasse18
0
chasse18 Messages postés 51 Date d'inscription mercredi 1 décembre 2004 Statut Membre Dernière intervention 10 juin 2005 1
26 avril 2005 à 11:04
Voila se que me dit Borland C++ Builder 6



void __fastcall TForm1::Button1Click(TObject *Sender)



{

Graphics::TBitmap *pBitmap = new Graphics::TBitmap();

// This example shows drawing directly to the Bitmap

Byte *ptr;

try

{

pBitmap->LoadFromFile("C:\\Program Files\\Common
Files\\Borland Shared\\Images\\Splash\\256color\\factory.bmp");

for (int y = 0; y < pBitmap->Height; y++)

{

ptr = (Byte *)pBitmap->ScanLine[y];



for (int x = 0; x < pBitmap->Width; x++)

ptr[x] = (Byte)y;

}

Canvas->Draw(0,0,pBitmap);

}

catch (...)

{

ShowMessage("Could not load or alter bitmap");

}

delete pBitmap;

}



Voila pour une des infos sinon Power GOOGLE

Chasse18
0
cs_athomas Messages postés 4 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 19 février 2008
19 févr. 2008 à 16:35
Bonjour,

J'arrive a utiliser scanline pour des images niveaux de gris sur 8bits, par contre, je ne parviens pas a l'utiliser correctement pour des bitmaps couleur de 24bits.
A ce que j'ai compris, scanline renvoit un pointeur dont la dimension est 3xlargeur de l'image ... pour les 3 composantes dans l'ordre B G R
Soit B G R B G R ....... B G R

Je voudrais tout simplement effectuer une mise en niveau de gris, ce qui revient à calculer le coefficient G = 1/3 * (B + G + R) et  à l'affecter aux trois composantes. Cepandant , cela ne fonctionne pas ... L'image que j'obtiens est toute jaunie.

Voici mon code :
        Byte *ptr;
        byte G;
        for (int y = 0; y < radio_grand->Picture->Bitmap->Height; y++)
        {
                ptr = (Byte *)radio_grand->Picture->Bitmap->ScanLine[y];

                for (int x = 0; x < 3*radio_grand->Picture->Bitmap->Width-2; x+=3)
                {
                          G =floor( (1/3)*
                                        (ptr[x]+
                                         ptr[x+1]+
                                         ptr[x+2])
                                       );
                         ptr[x]=G;
                         ptr[x+1]=G;
                         ptr[x+2]=G;

                }

        }
        radio_grand->Refresh();

Merci bien .
0
cs_athomas Messages postés 4 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 19 février 2008
19 févr. 2008 à 16:40
Erreur, l'image n'est pas jaune , mais toute noire . Voici un screenshot.

Une idée ?
0
Rejoignez-nous