TopenDialog [Résolu]

Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
- - Dernière réponse : DRJEROME
Messages postés
447
Date d'inscription
jeudi 9 janvier 2003
Dernière intervention
5 février 2015
- 10 mai 2007 à 20:13
Bonsoir à tous,

Est t'il possible avec un composant TopenDialog de charger un fichier en Bmp ou Jpg et de lui donner une largeur et hauteur définie qui sera toujours la même par exemple H700xlargeur450 malgré que ces fichiers ont une autre dimension avant le chargement.

Le composant récepteur est un Timage et malgré la propriété Strech à true, cela ne fonctionne pas.

Merci,

@+,

Cincap

[url]mailto:/url
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
3
Merci
implementation

uses JPeg;

{$R *.dfm}

procedure JPEGToBMP(JPG : TJPegImage; BMP : TBitmap);
begin
  BMP.Width := JPG.Width;
  BMP.Height:= JPG.Height;
  BMP.PixelFormat := pf24bit;
  BMP.Canvas.Draw(0,0,JPG);
end;

procedure TForm1.Button1Click(Sender: TObject);
var JPG : TJPegImage;
    BMP : TBitmap;
    Ext : string;
    BMPLoaded : boolean;
    NewH, NewW, OldSBM : integer;
begin
  { initialisation }
  BMPLoaded := false;

  { ouverture d'une image }
  if OpenDialog1.Execute then
  begin
    { recuperation de l'extention }
    Ext := LowerCase(ExtractFileExt(OpenDialog1.FileName));

    { creation du bitmap temporaire }
    BMP := TBitmap.Create;
    try
      { si c'est un jpeg }      if (ext '.jpg') or (ext'.jpeg') then
      begin
        { creation d'une image jpeg }
        JPG := TJPegImage.Create;
        try
          { charge a partir du fichier }
          JPG.LoadFromFile(OpenDialog1.FileName);
          { convertion JPG > BMP }
          JPEGToBMP(JPG,BMP);
          { BMP est prét }
          BMPLoaded := true;
        finally
          { liberation de JPG }
          JPG.Free;
        end;
      end
      else
      { si c'est un bitmap }
      if ext = '.bmp' then
      begin
        { charge a partir du fichier }
        BMP.LoadFromFile(OpenDialog1.FileName);
        { BMP est prét }
        BMPLoaded := true;
      end;

      { si BMP est prét }
      if BMPLoaded then
      begin
        { selon les options de conservation du rapport H/L ou L/H }
        case RadioGroup1.ItemIndex of
          1 : begin { on garde le rapport H/L, exp : 480/640 = 0.75 }
                NewW := 700;
                NewH := round(NewW * (BMP.Height / BMP.Width));
              end;
          2 : begin { on garde le rapport L/H, exp : 640/480 = 1.33 }
                NewH := 450;
                NewW := round(NewH * (BMP.Width / BMP.Height));
              end;
          else
              begin { on ne conserve pas le rapport de dimension }
                NewW := 700;
                NewH := 450;
              end;
        end;

        { enfin on vas injecter BMP dans le bitmap de Image1 (autosize = true) }
        with Image1.Picture.Bitmap do
        begin
          { on definit les nouvelles dimensions }
          width       := NewW;
          height      := NewH;
          { on travail en couleurs 24bpc }
          pixelformat := pf24bit;

          { on sauvegarde l'ancien mode de redimension du canvas }
          OldSBM := GetStretchBltMode(Canvas.Handle);

          { et on le definit en mode HALFTONE }
          SetStretchBltMode(Canvas.Handle, HALFTONE);

          { on dessine l'image }
          StretchBlt( Canvas.Handle, 0, 0, NewW, NewH,
                      BMP.Canvas.Handle, 0, 0, BMP.Width, BMP.Height,
                      SRCCOPY);

          { on restaure le mode de redimensionnement du canvas }
          SetStretchBltMode(Canvas.Handle, OldSBM);
        end;
      end;
    finally
      { on libere BMP }
      BMP.Free;
    end;
    { on rafraichi Image1 }
    Image1.Refresh;
  end;
end;

end.





<hr size="2" width="100%" />
Croc (click me)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de f0xi
0
Merci
Salut

Le composant TOpenDialog est juste une "form" pour sélectionner un fichier existant.
Cela n'a rien avoir avec une image quelque soit son format.

Il t'est possible de sélectionner une image via un TOpenDialog et de réaliser un redimensionnement : voir le source de delphiprog sur ce site (admin CS : voir onglet correspondant).

@+
Commenter la réponse de Utilisateur anonyme
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
0
Merci
Bonsoir Francky,

Merci de ta réponse, je continue à chercher car c'est pas evident de redimensionner un bitmap au chargement avant de l'attribuer au Timage.

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
0
Merci
Bonjour à tous,

@ Foxi, décidement avec toi l'aide est complète, tu n'oublies pas non plus de renseigner ce qu'il faut mettre dans l'implentation.

Grand merci pour l'aide, j'étais parti pour une autre solution mais sans lissage de l'image donc avec perte de qualité.

Bonne journée à tous.

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
0
Merci
Correction : "implementation" naturellement.

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
de rien CinCap, la manipulation d'image a toujours été une tache assé ardue et presque inaccessible au debutants.
et comme il est assé difficile de trouver de bonnes solutions dans les sources CS vaux mieux donner un bout de code.

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi
Messages postés
447
Date d'inscription
jeudi 9 janvier 2003
Dernière intervention
5 février 2015
0
Merci
salut,

ah ! ça fait plaisir de voir que ma méthode "SetStretchBltMode Halftone" est utilisée

DrJerome
Commenter la réponse de DRJEROME
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
0
Merci
Bonsoir à tous,

Encore merci pour le code et la méthode .

La connaissance s'accroit quand on la partage !

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
Messages postés
447
Date d'inscription
jeudi 9 janvier 2003
Dernière intervention
5 février 2015
0
Merci
de rien ;)

DrJerome
Commenter la réponse de DRJEROME

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.