begin process at 2010 02 10 09:15:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Mutimédia

 > 

Image & Vidéo

 > 

cadre carré dans un TShape


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

cadre carré dans un TShape

mardi 27 mai 2008 à 18:06:26 | cadre carré dans un TShape

ender27

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;

 

vendredi 30 mai 2008 à 12:47:15 | Re : cadre carré dans un TShape

ender27

Réponse acceptée !

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.



Cette discussion est classée dans : tableau, pixels, dc, shape1, coorddc


Répondre à ce message

Sujets en rapport avec ce message

prb avec dll et tableau dynamique [ par bd ] actuellement je recois en parametre d'une fonction un tableau de longueur variable. ce tableau est rempli dans la fonction de la dll.au retour dans la tableau dynamique de type TStrings [ par Teardrop ] Bonjour,je suis sur un petit projet de client mail utilisant le composant Pop3Client du pack ICS de F.Piette.J'aimerai bien pouvoir stocker les header Insertion d'un tableau dans un DBRichEdit [ par Adel ] Pour les besoins de la réalisation d'un mini traitement de texte je voudrai savoir s'il est possible d'insérer un tableau multicolonnes dans un DBRich Selection graphique [ par jlg75 ] Pb sur mon prog de dessin (DAO). Je souhaite acceder à l'information au niveau pixel pour selectionner l'entite auquel il appartient (cercle,ligne..et DELPHI - WORD : quelle solution technique pour un tableau sous Word ? [ par manudel ] Je dois récupérer le contenu d'un curseur avec un composant OracleDataSet.Sur mon document Word, j'ai un tableau de 10 lignes, avec 8 colonnes.Dans mo [debutant] Probleme de Pointer... ou pas ??? [ par damanix ] Alors Voila, mettons que j'ai un typetype TPersonne= class(TObject) nom: String; taille: Integer; poids: Integer; end;que j'ai un array dynam passer un tableau de variant à un paramètre Integer [ par manudel ] Je déclare un tableau de Variant : tab := VarArrayCreate([0,100],varVariant);que j'alimente.quand il est alimenté, il a cette forme :1,2,3,4,5,6,7,8, suppression dynamique [ par seeev ] Bonjour, j'ai un probleme dont je n'arrive pas à me sortir.je stoque des TSpeedButton dans un tableau de manière à pouvoir les créer, les afficher et identifier une form [ par seeev ] Bonjour à tousVoilà, je crée des fenêtres dynamiquement à partir d'un type de fenetre que j'ai appeleé FormGraph enfin peu importe...Le fait est que j AFFICHER UN TABLEAU DYNAMIQUE [ par ghassenus ] salut je voudrais bien afficher un tableau dynamique dans un TSTRING mais j'y arrive pas alors de l'aide serais la bien venue:)Tendrement


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales