Sélection dans une image Jpeg

Résolu
dieuchrist Messages postés 9 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 27 novembre 2006 - 1 nov. 2006 à 10:43
dieuchrist Messages postés 9 Date d'inscription mercredi 1 novembre 2006 Statut Membre 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

8 réponses

Utilisateur anonyme
1 nov. 2006 à 17:18
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

@+
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 nov. 2006 à 10:53
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" />
0
dieuchrist Messages postés 9 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 27 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
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
1 nov. 2006 à 11:45
Salut,



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



Quelques lignes de code, please.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 nov. 2006 à 12:13
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" />
0
dieuchrist Messages postés 9 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 27 novembre 2006
1 nov. 2006 à 13:24
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
0
dieuchrist Messages postés 9 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 27 novembre 2006
1 nov. 2006 à 15:29
//------------------------------------------------------------------------------<?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
0
dieuchrist Messages postés 9 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 27 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
0
Rejoignez-nous