Cadre carré dans un TShape

Résolu
ender27 Messages postés 7 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 2 juin 2008 - 27 mai 2008 à 18:06
ender27 Messages postés 7 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 2 juin 2008 - 30 mai 2008 à 12:47
Bonjour,
J'ai actuellement un problème pour dessiner des carré sur un TShape.

Entrée : image noir avec des pixels blancs (Les coordonnées de chaque pixels blancs sont rentrés dans un tableau).
Sortie : image noir toujours avec des pixels blancs, mais ces pixels blancs doivent être entourés d'une bordure carré de coté RayonFiltre.

Mon problème se situe sur le morceau de code surligné en rouge.
Je n'arrive pas à placer les carré autour de mes pixels blancs car je ne sais pas par quoi remplacer : random(Shape1.Width et Height).
J'ai déjà calculé mes positions X1,Y1 et X2,Y2 (X1=l, Y1=m, X2=n, Y2=p) pour utiliser le CreateRectRgn.

SVP aidez moi

Voici ma procédure (j'ai déjà pris un bout de code sur ce site) :

procedure TForm1.decoupage_buttonClick(Sender: TObject);
var
   i,g,j,l,m,n,p:integer;  Brush : HBRUSH;  DC : HDC;  CoordCanvas : Tpoint;  CoordDC : Tpoint;
begin
     if not EnCours then
     begin
          g:=0;
          for i:=0 to imConvertie.Picture.Width-1 do
              for j:=0 to imConvertie.Picture.Height-1 do
                          if imConvertie.Canvas.Pixels[i,j]=1 then
                          begin
                               Tableau_centre_antibiotique[g,0]:=i;   //on rentre les coordonnées des points blancs dans le 
                               Tableau_centre_antibiotique[g,1]:=j;   //tableau
                               with Regions[g] do
                               begin
                                    // On récupère les coordonnées Canvas de la forme
                                    CoordCanvas.X := Shape1.Left;
                                    CoordCanvas.Y := Shape1.Top;


                                    // On les convertit en coordonnées écran
                                    CoordDC := ClientToScreen(CoordCanvas);


                                    // On leur ajoute ensuite les coordonnées du coin haut gauche de la fiche (F)
                                    // Ce qui nous donne la position du TShape par rapport au coin (F)
                                    CoordDC.X := CoordDC.X - Form1.Left;
                                    CoordDC.Y := CoordDC.Y - Form1.Top;


                                    l:=Tableau_centre_antibiotique[g,0]-RayonFiltre;
                                    m:=Tableau_centre_antibiotique[g,1]-RayonFiltre;
                                    n:=imConvertie.Picture.Width - Tableau_centre_antibiotique[g,0] - RayonFiltre;
                                    p:=imConvertie.Picture.Height - Tableau_centre_antibiotique[g,1] - RayonFiltre;
                                   
                                    // On crée les regions en tenant compte de l'origine du TShape
                                    // en coordonnées "DC" et de sa taille
                                    Handle:=CreateRectRgn ( CoordDC.X + random(Shape1.Width)
                                                          , CoordDC.Y + random(Shape1.Height)
                                                          , CoordDC.X + random(Shape1.Width)
                                                          , CoordDC.Y + random(Shape1.Height)
                                                          ) ;


                                    Couleur := RGB(255,0,0); //pour faire un cadre de couleur rouge


                                    // Ici on récupère le "device context" de la fiche principale
                                    // (le DC sous windows représente à peu de chose près le canvas sous delphi)
                                    DC := GetWindowDC(Form1.Handle);


                                    // création d'une brosse pour dessiner à la couleur de la region
                                    Brush := CreateSolidBrush(Couleur);


                                    // Remplissage de la région
                                    //FillRgn(DC,Handle,Brush);   //pour remplir la région d'une couleur
                                    FrameRgn(DC,Handle,Brush, 1, 1);  //pour faire un cadre


                                    // Suppression des divers objets créés
                                    DeleteObject(Brush);
                                    ReleaseDC(Handle,DC);
                                    DeleteObject(Handle);
                               end;
                               g:=g+1;
                          end;  end;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>




 

1 réponse

ender27 Messages postés 7 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 2 juin 2008
30 mai 2008 à 12:47
Ok, c'est bon.
Trouvé

j'avais fait une erreur au niveau de mes valeurs n et p. Et il faut faire deux regles de trois pour transformer les coordonnées de mon image (ex taille : 640*480) en coordonnée TShape.

Voici la partie modifiée :

                                    l:=(Tableau_centre_antibiotique[g,0]-RayonFiltre);
                                    m:=(Tableau_centre_antibiotique[g,1]-RayonFiltre);
                                    n:=(Tableau_centre_antibiotique[g,0]+RayonFiltre);
                                    p:=(Tableau_centre_antibiotique[g,1]+RayonFiltre);


                                    //regle de trois pour trouver le pourcentage que reprente une image en 640*480 par rapport
                                    //a la taille du TShape.
                                    z:=(imConvertie.Picture.Width*100) div Shape1.Width;
                                    y:=(imConvertie.Picture.Height*100) div Shape1.Height;


                                    // On crée les regions en tenant compte de l'origine du TShape
                                    // en coordonnées "DC" et de sa taille
                                    Handle:=CreateRectRgn ( CoordDC_finale.X +(l*100) div z  //coordonnée pour ecrire dans le TShape + regle de trois pour
                                                          , CoordDC_finale.Y +(m*100) div y  //trouver les pourcentage que represente chaque coordonnee du centre
                                                          , CoordDC_finale.X +(n*100) div z  //par rapport aux dimensions du TShape
                                                          , CoordDC_finale.Y +(p*100) div y
                                                          ) ;

A plus.
3
Rejoignez-nous