Recadrer une image JPEG et la télécharger sur la base de données

tarssinas Messages postés 7 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 9 juillet 2017 - 7 juil. 2017 à 18:33
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 10 juil. 2017 à 10:01
Bonjour les pros,

Je suis souhaiites créer un programme qui permet de recadrer une image sur une form, le cadre doit avoir les mesures suivante 500 largeur et 300 hauteur, l'utilisateur ne pour pas toucher au cadre mais positionner l'image sur le cadre.

Merci d'avance pour votre réponse

3 réponses

korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
Modifié le 9 juil. 2017 à 14:02
Salut,

tu peux charger ton image à recadrer dans une TImage, que tu as placée dans un TPanel (par exemple) de 500 par 300.
Tu peux déplacer la TImage avec la souris en utilisant ce code, à affecter à l'évènement "Image.OnMouseDown" du TImage
(Image1 dans cet exemple) :

var
  ImagePos, MousePos: TPoint;
  DiffX, DiffY: Integer;
begin
  GetCursorPos(MousePos);
  Windows.ScreenToClient(Handle, MousePos);
  DiffX := MousePos.X - Image1.Left;
  DiffY := MousePos.Y - Image1.Top;
  while DragDetect(Handle, ImagePos) do
  begin
    GetCursorPos(MousePos);
    Windows.ScreenToClient(Handle, MousePos);
    Image1.Left := MousePos.X - DiffX;
    if Image1.Left > 0 then Image1.Left := 0;
    if Image1.Left < (Width - Image1.Width) then
      Image1.Left := Width - Image1.Width;
    Image1.Top := MousePos.Y - DiffY;
    if Image1.Top > 0 then Image1.Top := 0;
    if Image1.Top < (Height - Image1.Height) then
      Image1.Top := Height - Image1.Height;
    Application.ProcessMessages;
  end;
end;


Pour la suite, il te suffira de capturer l'image apparente dans un TBitmap.

Tu me diras si ça t'intéresse (*)

korgis

(*) pas beaucoup de retours sur les réponses depuis quelques temps... alors on y va à l'économie de moyens ^^
0
tarssinas Messages postés 7 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 9 juillet 2017
9 juil. 2017 à 22:37
Salut Korgis

Merci pour ta réponse, ton code ne fonctionne pas, l'image ne ce déplace pas, en ce moment je bosse sur le code, j'ai utilisé la fonction suivante pour redimensionner l'image, reste juste à mettre un cadre et donner à l’utilisateur la possibilité de bien cadrer son image. la fonction qui permet le redimensionnement est la suivante :
var
  Bitmap: TBitmap;
  Ratio: double;
begin
  {Si l'image est vide ou la largeur est nulle, sortir}
  if (srcJpeg.Empty) or (MaxSize <= 0) then
    Exit;

    { Création d'un TBitmap le temps de redimensionner l'image }
  Bitmap := TBitmap.Create;
  try
      { Détermination du cadrage Vertical ou horizontal}
    Ratio := srcJpeg.Height / srcJpeg.Width;
    if Ratio > 1 then
        //Cadrage vertical
      Bitmap.Width := Round(MaxSize / Ratio)
    else
        //cadrage horizontal
      Bitmap.Width := MaxSize;
    Bitmap.Height := Round(Bitmap.Width * Ratio);
      //Copie de l'image avec redimensionnement sur le canvas du TBitmap
    Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect, srcJpeg);
      {Il ne reste plus qu'à copier l'image redimensionnée dan le Jpeg
      à retourner}
    destJpeg.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;


En faite le projet sur lequel je bosse actuellement est un peut vaste c'est pour cela que je vous demande de l'aide, j'ai pu créer un logiciel de location de voiture qui marche sous plusieurs vesrion, la version local, version local + en ligne (qui permet de consulter à temps réel les données de l'agence exemple sur le lien suivant : utilisateur DEMONSTRATION mot passe : admin lien http://carloc.reoleweb.com/index.php) et la version local + en ligne + site web (consultation des données et apparition sur le site web qui englobe toute ls agences qui bosse avec mon logiciel "le site est un comparateur e prix que vous pouvez consulter sur le lien suivant : http://carloc-algerie.com/index.php?localisation=Bejaia%2C+Seddouk%2C%26%2334%3B%29. donc ce qui veut dire que le projet est mélange de delphi MySQL et web (PHP, HTML, CSS, Javascript).
Le logiciel est équipé d'un système de synchronisation automatique. alors j'aimerai avoir les memes proportions d'image que tous les utilisateur enregistre sur leurs logiciel (Logo, images véhicule).
Je vous serai reconnaissant si qlq'un puissent me donner une solution

Merci à tous
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 juil. 2017 à 18:20
(*) pas beaucoup de retours sur les réponses depuis quelques temps... alors on y va à l'économie de moyens ^^
tout à fait d'accord avec toi!
j'ai déposé des codes et comme d'habitude c'est téléchargé à gogo
et pas un retour :-s

c'est triste, en effet, ça ne donne pas envie de partager, du coup comme toi je retiens mes interventions et dépôts ... Malheureusement.

Voilà c'était mon coup de gueule ^^

au passage je me suis pris au jeu et j'ai écris une fonction qui permet de charger partiellement un bitmap directement depuis le fichier.

Ex: si on a un Bitmap 3800 X 2700 et on veut charger une portion de 400 X 400 à l'offset x:3000 y:2000 ... on peut ^^
  Bmp := PartialLoadFromFile('Moteur3D_03_256.bmp', 3000, 2000, 400, 400);
la fonction accepte tous les types de bitmap [pf1Bit..pf32bit]
Et pareil ... si intéressé ... se manifester

Cordialement,
0
tarssinas Messages postés 7 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 9 juillet 2017
9 juil. 2017 à 22:42
Merci pour votre réponse Cire, je pense que vous n'avez pas tout à fait compris ce que je veut dire, j'ai utilisé une fonction qui permet de redimensionner l'image mais le problème qui ce pose est que dès fois l'image n'est pas bien cadré, donc pour cela l’utilisateur doit positionner l'image sur le cadre.

Merci encore une fois pour votre réponse
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50 > tarssinas Messages postés 7 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 9 juillet 2017
10 juil. 2017 à 10:01
pour recadrer simplement par la souri :
var // Variables Globales
  XPos, YPos        : Integer;

procedure TForm1.Image1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    XPos := X;
    YPos := Y;
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    Image1.Left := Image1.Left + X - XPos;
    Image1.Top := Image1.Top + Y - YPos;
  end;
end;

tu peux ajouter :
  DoubleBuffered := True;

dans le OnCreate de la fiche ce qui évitera les scintillements

sinon j'avais bien compris ta demande mais c'est ma réponse qui a été mal comprise !!

Cordialement,
@+
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
9 juil. 2017 à 18:29
Salut,
qu'est ce que vous voulez, Internet est devenu un grand self service, ou l'internaute prend et use sans vergogne.

Elle est loin l'époque ou il fallait acheter des revues spécialisées mensuelles dans l'espoir de trouver un snippet salvateur.
Aujourd'hui, ils postent sans même chercher si la question n'a pas déjà été posée 1000 fois, font un up au bout d'une heure (pour les patients), et c'est limite si tu te fais pas engueuler si tu demandes des détails pour essayer de répondre....

Heureusement qu'il y en a encore quelques un qui disent merci.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 9 juil. 2017 à 18:49
Bonsoir à tous
tout à fait d'accord avec toi Whismeril : je me souviens de ces revues où on cherchait la perle rare qui nous sauvait la vie ou nous faisait entrevoir une piste de recherche
0
tarssinas Messages postés 7 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 9 juillet 2017
Modifié le 9 juil. 2017 à 22:45
Toute à fait vrai mais le monde avance, y aurai une générale futur qui aura le savoir avec un simple vaccin hhhh alors ne vous étonnais pas. Et je vous remercie pour les aident que vous offrez sur ce site.
0
Rejoignez-nous