Probléme de conversion graphics bitmap apres une operation de bezier

astragoth66 Messages postés 31 Date d'inscription lundi 6 juin 2005 Statut Membre Dernière intervention 2 octobre 2005 - 6 juil. 2005 à 11:03
aogie Messages postés 108 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 27 novembre 2007 - 6 juil. 2005 à 13:36
Salut,



Voila je suis en train de faire du traitement d'image, et j'ai besoin
de relier différent point de mon image de type Bitmap, à l'aide de la
fonction de bezier.

Voici mon code:



//je parcour mon image pour compter le nombre de point que je doit relier

int cptpt = 0;

BitmapData bmpdata = bmp.LockBits( new Rectangle( 0 , 0 , bmp.Width ,
bmp.Height ) , ImageLockMode.ReadWrite ,PixelFormat.Format24bppRgb );



int width = bmpdata.Width;

int height = bmpdata.Height;

unsafe

{

int remain1 = bmpdata.Stride - bmpdata.Width * 3;

byte* ptr1 = ( byte* )bmpdata.Scan0;

for( int i = 0 ; i < height ; i ++ )

{


for( int j = 0 ; j < width * 3
; j ++ )

{


if(ptr1[ 0 ]
255)

{



cptpt++;

}

ptr1 ++;

}

ptr1 += remain1;

}

}

bmp.UnlockBits(bmpdata);



//je reparcour mon image pour faire un tableau de de type point (pour avoir mes coordonnée en X et Y)

bmpdata = bmp.LockBits( new Rectangle( 0 , 0 , bmp.Width , bmp.Height )
, ImageLockMode.ReadWrite , PixelFormat.Format24bppRgb );

Point[] points = new Point[cptpt];

int cpt=0;

unsafe

{

int remain1 = bmpdata.Stride - bmpdata.Width * 3;

byte* ptr = ( byte* )bmpdata.Scan0;

for( int i = 0 ; i < height ; i ++ )

{


for( int j = 0 ; j < width * 3
; j ++ )

{


if(ptr[ 0 ] ==
255)

{



points[cpt].X = j/3;



points[cpt].Y = i;



cpt++;

}

ptr ++;

}

ptr += remain1;

}

}

bmp.UnlockBits(bmpdata);



//puis je transforme mon image Bitmap en graphics (Graphics G = Graphics.FromImage(bmp);)

//et j'applique la fonction de bezier de C#

//et je retourne mon image

Pen pinceau = new Pen(Color.White,5);

Graphics G = Graphics.FromImage(bmp);

G.DrawBeziers(pinceau,points);

return bmp;



Lorsque j'exécute ce code, il plante à la derniére ligne, lors du return, voici l'erreur:

An unhandled exception of type 'System.ArgumentException' occurred in system.drawing.dll

Additional information: Invalid parameter used.



Bref j'ai tourné le probléme dans ts les sens et je n'arrive pas a comprendre mon probléme.

Donc je suis preneur pour toute aide !!!!

Merci d'avance

@str@goth

1 réponse

aogie Messages postés 108 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 27 novembre 2007
6 juil. 2005 à 13:36
Une courbe de béziers abesoin de 4 points pour être dessinée.

La méthode DrawBeziers demande un tableau de points sachant que les
informations nécessaires pour chaque courbe sont présentes...

Pour 2 courbes, il faut le point de départ, 2 points de contrôle, le
point de fin puis 2 nouveaux points de contrôle et le deuxième point de
fin. Le point de départ de la deuxième courbe étant le point de fin de
la première.

Tu peux donc avoir 4, 7, 10, 13, 16, 19... etc points dans ton tableau. Tout autre nombre provoque une erreur.

-- AOGie --
0