TopenDialog

Résolu
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 - 9 mai 2007 à 19:50
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre 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

9 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
10 mai 2007 à 03:24
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)
3
Utilisateur anonyme
9 mai 2007 à 20:32
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).

@+
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
9 mai 2007 à 20:43
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
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
10 mai 2007 à 08:29
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
0

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

Posez votre question
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
10 mai 2007 à 08:32
Correction : "implementation" naturellement.

@+,

Cincap

[url]mailto:/url
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
10 mai 2007 à 16:58
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)
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
10 mai 2007 à 19:29
salut,

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

DrJerome
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
10 mai 2007 à 20:10
Bonsoir à tous,

Encore merci pour le code et la méthode .

La connaissance s'accroit quand on la partage !

@+,

Cincap

[url]mailto:/url
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
10 mai 2007 à 20:13
de rien ;)

DrJerome
0
Rejoignez-nous