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;