TopenDialog [Résolu]

cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 9 mai 2007 à 19:50 - Dernière réponse : DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention
- 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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 10 mai 2007 à 03:24
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)

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de f0xi
Utilisateur anonyme - 9 mai 2007 à 20:32
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
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 9 mai 2007 à 20:43
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
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 10 mai 2007 à 08:29
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
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 10 mai 2007 à 08:32
0
Merci
Correction : "implementation" naturellement.

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 10 mai 2007 à 16:58
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
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 10 mai 2007 à 19:29
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
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 10 mai 2007 à 20:10
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
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 10 mai 2007 à 20:13
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.