ender27
Messages postés7Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention 2 juin 2008
-
27 mai 2008 à 18:06
ender27
Messages postés7Date d'inscriptionmercredi 5 mars 2008StatutMembreDerniè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;
// 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" /??>
ender27
Messages postés7Date d'inscriptionmercredi 5 mars 2008StatutMembreDerniè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.
//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
) ;