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

tarssinas 7 Messages postés samedi 11 août 2007Date d'inscription 9 juillet 2017 Dernière intervention - 7 juil. 2017 à 18:33 - Dernière réponse : Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 11 mai 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

korgis 415 Messages postés samedi 17 mai 2003Date d'inscription 11 mai 2018 Dernière intervention - Modifié par korgis le 9/07/2017 à 14:02
0
Merci
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 ^^
tarssinas 7 Messages postés samedi 11 août 2007Date d'inscription 9 juillet 2017 Dernière intervention - 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
Commenter la réponse de korgis
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 11 mai 2018 Dernière intervention - 9 juil. 2017 à 18:20
0
Merci
(*) 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,
tarssinas 7 Messages postés samedi 11 août 2007Date d'inscription 9 juillet 2017 Dernière intervention - 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
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 11 mai 2018 Dernière intervention > tarssinas 7 Messages postés samedi 11 août 2007Date d'inscription 9 juillet 2017 Dernière intervention - 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,
@+
Commenter la réponse de Cirec
Whismeril 11558 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 26 mai 2018 Dernière intervention - 9 juil. 2017 à 18:29
0
Merci
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.
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 9 juil. 2017 à 18:47
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
tarssinas 7 Messages postés samedi 11 août 2007Date d'inscription 9 juillet 2017 Dernière intervention - 9 juil. 2017 à 22:43
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.
Commenter la réponse de Whismeril

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.