Sélection dans une image Jpeg [Résolu]

Messages postés
9
Date d'inscription
mercredi 1 novembre 2006
Dernière intervention
27 novembre 2006
- 1 nov. 2006 à 10:43 - Dernière réponse :
Messages postés
9
Date d'inscription
mercredi 1 novembre 2006
Dernière intervention
27 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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
1 nov. 2006 à 17:18
3
Merci
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;
 
Const
       ASelectColor = 0;
       ARectangle = 1;
       ALine = 2;
       ACircle = 3;
       APainting = 4;

-------------------------

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;

VisualImage est ton TImage

Je n'ai pas le temps de tester

@+

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
1 nov. 2006 à 10:53
0
Merci
Salut,

pour pouvoir travailler sur un JPEG il faut impérativement le convertir en BMP

Ensuite pour le reste donne nous un exemple de ton code (la section qui pose problème) ...

 
@+
Cirec

<hr size="2" />
Commenter la réponse de Cirec
Messages postés
9
Date d'inscription
mercredi 1 novembre 2006
Dernière intervention
27 novembre 2006
1 nov. 2006 à 11:16
0
Merci
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
Commenter la réponse de dieuchrist
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
1 nov. 2006 à 11:45
0
Merci
Salut,



Faudrait peut-être arrêter aussi les jours fériés, mdr...



Quelques lignes de code, please.
Commenter la réponse de japee
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
1 nov. 2006 à 12:13
0
Merci
je te propose de refaire ton code et ensuite tu le postes ici et on se fera un plaisir de t'aider

 
@+
Cirec

<hr size="2" />
Commenter la réponse de Cirec
Messages postés
9
Date d'inscription
mercredi 1 novembre 2006
Dernière intervention
27 novembre 2006
1 nov. 2006 à 13:24
0
Merci
J'essaierai aussi les jours ferié. ok alors je refais mon code et je le met sur le site

J'ai arrêté de boire le week-end, maintenant je bois plus que la semaine, y'a plus de jours
Commenter la réponse de dieuchrist
Messages postés
9
Date d'inscription
mercredi 1 novembre 2006
Dernière intervention
27 novembre 2006
1 nov. 2006 à 15:29
0
Merci
//------------------------------------------------------------------------------<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>







// Nom de la procédure: img_principalMouseDown







// Descriptif: Permet d'enregistré la position initial de la souris







// Paramètre I/O:







//               Entrée: Aucun







//               Sortie: Form2







//------------------------------------------------------------------------------







procedure TImageZoneSelectForm.img_principalMouseDown(Sender: TObject;








  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);







begin







GetCursorPos(Position_initial); //Définition du point de départ de la sélection







deplacement_curseur:=true; {indique la fin de la sélection(voir procédure:








                                img_principalMouseMove)}







end;








 








//------------------------------------------------------------------------------







// Nom de la procédure: img_principalMouseUp







// Descriptif: Permet d'enregistré la position final de la souris







// Paramètre I/O:







//               Entrée: Aucun







//               Sortie: Form2







//------------------------------------------------------------------------------







procedure TImageZoneSelectForm.img_principalMouseUp(Sender: TObject;








  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);







begin







deplacement_curseur:=false; // arrête le déplacement du cadre







GetCursorPos(Position_final); //Définition du point final de la sélection







fin_deplacement:=true; {indique la fin de la sélection(voir procédure:








                                img_principalMouseMove)}







end;








 








//------------------------------------------------------------------------------







// Nom de la procédure: img_principalMouseMove







// Descriptif: affiche le cadre







// Paramètre I/O:







//               Entrée: Aucun







//               Sortie: Form2







//------------------------------------------------------------------------------







procedure TImageZoneSelectForm.img_principalMouseMove(Sender: TObject;








  Shift: TShiftState; X, Y: Integer);







begin







if deplacement_curseur = true then    //regarde si l'on autorise de faire un cadre








  begin








  img_principal.Canvas.Rectangle(Position_initial.X, Position_initial.Y, X,Y);








  end;          //dessine le rectangle avec pour point d'origine, la position du  click enfoncer de la souris








   

begin









      if fin_deplacement = true  then








       

img_principal.Canvas.Rectangle(Position_initial.X, Position_initial.Y, Position_final.X, Position_initial.Y);









    end;     //dessine le rectangle avec pour point d'origine, la position du  click enfoncer de la souris ainsi







end;         //que le point final








 








//------------------------------------------------------------------------------







// Nom de la procédure: FormCreate







// Descriptif: interdit le déplacement et l'affichage du cadre







// Paramètre I/O:







//               Entrée: Aucun







//               Sortie: Form2







//------------------------------------------------------------------------------







procedure TImageZoneSelectForm.FormCreate(Sender: TObject);







begin







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
Commenter la réponse de dieuchrist
1 nov. 2006 à 16:03
0
Merci
Ben regarde ici :

 http://www.delphifr.com/codes/VIDEOCREATOR-ANIMATION-IMAGES_39259.aspx

Il y a une procedure pour dessiner des rectangles comme sous paintbrush à partir d'une image BMP/JPEG.

Maintenant pour réaliser un cadre de sélection, il existe des composants tout fait (voir sur les pages de torry et delphipages)
Commenter la réponse de Utilisateur anonyme
Messages postés
9
Date d'inscription
mercredi 1 novembre 2006
Dernière intervention
27 novembre 2006
7 nov. 2006 à 11:02
0
Merci
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
Commenter la réponse de dieuchrist

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.