dieuchrist
Messages postés9Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention27 novembre 2006
-
1 nov. 2006 à 10:43
dieuchrist
Messages postés9Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention27 novembre 2006
-
7 nov. 2006 à 11:02
Bijour,
voilà mon tit problème:
je dois faire un recadreur d'image(pouvoir sélectionner une partie de l'image) jpeg, tout en choisisant un rapport de forme sur ma sélection. Mais je n'arrive pas a faire de sélection dans mon image. J'ai trouver quelque code sur le site mais lorsque que je l'ai utilise sa ne marche pas et ausi j'aimerai eviter de transformer mon image en bitmap car tous ces codes sont pour des images bitmap et j'ai essayer de faire des recherches sur google mais soit je tombe sur des trucs qui ne m'aide pas vraiment soit c des truc rien a voir. Donc si quelqu'un pourai m'aider sa serai formidable
J'ai arrêté de boire le week-end, maintenant je bois plus que la semaine, y'a plus de jours
Bon allez je suis ssympas j'ai fais le trie pour toi
1)Pour charger une image quelconque dans un TImage
Procedure TForm1.ShowImage(AFileName : String);
Var
JPeg : TJPegImage;
ABitMap : TBitMap;
Begin
With Main.VisualImage do
Begin
AutoSize:=False; {Pas de taille automatique}
Proportional:=false; {Nne garde pas de proportions}
stretch:=true;
If ExtractFileExt(AFileName)='.bmp' then Picture.BitMap.LoadFromFile(AFileName); {Methode pour un fichier image du type Bmp}
If ExtractFileExt(AFileName)='.jpg' then {Si on a un fichier JPeg, on réalise cette procédure}
Begin
JPEG := TJPEGImage.Create;
JPEG.LoadFromFile(AFileName);
ABitmap := TBitmap.Create;
Try
ABitmap.Width := JPEG.Width;
ABitmap.Height := JPEG.Height;
{Similaire sur le principe à la copie d'un bmp}
ABitmap.Canvas.Draw(0,0,JPEG);
Picture.BitMap.Assign(ABitMap);
Finally
ABitmap.Free;
JPEG.Free;
End;
End;
End;
End;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
If Opendialog1.execute then ShowImage(opendialog1.filename);
2)Dessiner une figure
var
NumAction : integer;
Xi,Yi : integer;
CopyBmp: TBitMap;
Procedure TMain.ActionOfPainting(x,y : integer);
Begin
{Le fameux case of pour déclencher l'action à réaliser suivant notre choix précédent : un case of est plus rapide qu'un while do, begin until, if then, for do}
Case NumAction Of
ASelectColor : ColorOfPixel(xi,yi);
ARectangle : DrawingARectangle(x,y);
ALine : DrawingALine(x,y);
ACircle : DrawingACircle(x,y);
APainting : DrawingAPixel(x,y);
End;
End;
{>>DESSINER UN PIXEL}
Procedure TMain.DrawingAPixel(x,y : integer);
Begin
Main.VisualImage.Canvas.Rectangle(xi,yi,xi+2,yi+2);
xi:=x;
yi:=y;
End;
{>>DESSINER UN TRAIT}
Procedure TMain.DrawingALine(x,y : integer);
Begin
Main.VisualImage.Canvas.MoveTo(Xi,Yi);
{Pour dessiner un trait}
Main.VisualImage.canvas.lineTo(x,y);
end;
{>>DESSINER UN RECTANGLE}
Procedure TMain.DrawingARectangle(x,y : integer);
Begin
Main.VisualImage.Canvas.brush.Style:=bsclear;
{On dessine un rectangle}
Main.VisualImage.Canvas.Rectangle(xi,yi,x,y);
end;
{>>DESSINER UN CERCLE}
procedure TMain.DrawingACircle(x,y : integer);
Begin
Main.VisualImage.Canvas.brush.Style:=bsclear;
{On dessine une ellipse/Cercle}
Main.VisualImage.canvas.ellipse(xi,yi,x,y);
end;
{>>SELECTIONNE LA COULEUR D'UN PIXEL}
Procedure TMain.ColorOfPixel(Xi,Yi : integer);
Var
AColor : TColor;
Begin
If not assigned(Main.VisualImage) then exit;
AColor:=Main.VisualImage.Canvas.Pixels[Xi,Yi];
Panel2.Color:=AColor;
{On sélectionne la couleur d'un pixel}
Main.VisualImage.Canvas.Pen.Color:=AColor;
End;
{>>COPIE D'UNE IMAGE}
Procedure TMain.CreateACopy;
Begin
{Si CopyBmp existe deja, on le détruit}
IF CopyBmp<>nil then FreeAndNil(CopyBmp);
{On le crée}
CopyBmp:=TBitMap.Create;
{Sa largeur est celle de l'image}
CopyBmp.Width:=Main.VisualImage.Width;
{Sa hauteur est celle de l'image}
CopyBmp.Height:=Main.VisualImage.Height;
{On copie l'image dans CopyBmp}
CopyBmp.Canvas.StretchDraw(CopyBmp.Canvas.ClipRect, Main.VisualImage.Picture.Bitmap);
End;
{>>AFFICHAGE DE LA COPIE}
Procedure TMain.ViewACopy;
Begin
{Si CopyBmp existe}
If CopyBmp<>nil then
{On l'affiche}
Main.VisualImage.Picture.Bitmap.Assign(CopyBmp);
End;
{>>RETOUCHER UNE IMAGE}
procedure TMain.VisualImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
{Si le bouton gauche de la souris est cliqué}
If (SSLeft in Shift) then
Begin
{On crée une copie de l'image}
PaintForm.CreateACopy;
{ On affiche la copie}
PaintForm.ViewACopy;
{ On place le point sur le canvas}
VisualImage.Canvas.MoveTo(X,Y);
{Position horizontale initiale}
Xi:=X;
{Position verticale initiale}
Yi:=Y;
end;
end;
procedure TMain.VisualImageMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
{Si le bouton gauche de la souris est cliqué}
If (SSLeft in Shift) then
Begin
{On affiche la copie}
PaintForm.ViewACopy;
{On réalise ActionOfPainting(x,y)}
PaintForm.ActionOfPainting(x,y);
end;
end;
procedure TMain.VisualImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
{Si le bouton gauche de la souris est cliqué on réalise ActionOfPainting(x,y)}
If (SSLeft in Shift) then PaintForm.ActionOfPainting(x,y);
end;
dieuchrist
Messages postés9Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention27 novembre 2006 1 nov. 2006 à 11:16
Ben le problême c qui as rien qui est afficher j'ai essayé plusieur code mais rien ne fonctionne(il n'y avait aucune sélection dans mon image transformer en bitmap, j'ai quand même essayé) en plus que je suis vite nerveu j'ai effacer tt mon code pour recommencer. j'ai essayer d'utiliser la méthode "Canvas.Rectangle(position.x, position.y, position_fin.x, position_fin.y). Pis a force d'enervement, je pète vraiment un cable assez grave, les joies de la prog quoi!
J'ai arrêté de boire le week-end, maintenant je bois plus que la semaine, y'a plus de jours
deplacement_curseur:=false; //interdit le commencement du cadre
fin_deplacement:=false; //interdit la fin du cadre
end;
mes problêmes sont les suivants:
-le point de départ du cadre n'est pas celuit dont je veu
-les cadres précèdent ne s'efface pas
-j'ai un scintillement de l'image lors du déplacement de la souris sur celle ci.
en plus j'oubliait, lors de l'ouverture d'une photo je convertit automatiquement la photo en bitmap
J'ai arrêté de boire le week-end, maintenant je bois plus que la semaine, y'a plus de jours
dieuchrist
Messages postés9Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention27 novembre 2006 7 nov. 2006 à 11:02
Merci. tu as passablement résolu mon problême mnt je n'ai plus qu'as trouver comment faire pour sélectionner l'intérieur de mon rectangle. merci encore et bonne journée
J'ai arrêté de boire le week-end, maintenant je bois plus que la semaine, y'a plus de jours