cs_FLOX
Messages postés3Date d'inscriptiondimanche 24 février 2002StatutMembreDernière intervention28 mars 2002
-
28 mars 2002 à 18:31
cs_athomas
Messages postés4Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention19 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.
chasse18
Messages postés51Date d'inscriptionmercredi 1 décembre 2004StatutMembreDernière intervention10 juin 20051 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.
cs_athomas
Messages postés4Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention19 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;