Mikes Delphi Site - Tipps & Tricks

Letzte Änderung: 14.09.2011

JPEG-Bilder laden

In der folgenden Routine soll ein JPEG-Bild in einem TImage dargestellt werden. Um sicherzustellen, daß das Bild auch tatsächlich im gewünschten TImage (hier Image1) dargestellt wird, wird zunächst das Bild in das Objekt MyJpeg vom Typ TJPEGImage mit der Klassen-Methode LoadFromFile geladen. Anschließend wird mit der Klassen-Methode DIBNeeded in eine Bitmap erzeugt, die dann an das Objekt MyBitmap vom Typ TBitmap übergeben wird.

Im Beispiel wird anschließend das richtige Darstellungsverhältnis für das gegebene Image1 ausgerechnet und dann das Objekt Image1 in diese errechneten Größe angepaßt. Im nächsten Schritt wird dann das Bild aus dem Objekt MyBitmap in die Komponente Image1 kopiert und das Bild via der Methode Stretch an die errechnete Größe angepaßt.

uses ..., Jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
  nFaktor: Double;
  str: String;
  MyJpeg: TJPEGImage;
  MyBitmap: TBitmap;
begin
  if OpenPictureDialog.Execute then
  begin
    Screen.Cursor := crHourGlass;
    MyBitmap := TBitmap.Create;
    MyBitmap.Assign(nil);
    str := LowerCase(OpenPictureDialog.FileName);
    Image1.Height := 241;
    Image1.Width := 241;
    Image1.Stretch := False;
    if (LowerCase(ExtractFileExt(str)) = '.jpg') or
       (LowerCase(ExtractFileExt(str)) = '.jpeg') then
    begin
      MyJpeg := TJpegImage.Create;
      MyJpeg.LoadFromFile(str);
      MyJpeg.DIBNeeded;
      MyBitmap.Assign(MyJpeg);
      MyJpeg.Free;
    end
    else
    begin

      MessageDlg(Format('FATALER FEHLER!%sDieses Bildformat ist
                 unbekannt!
',[#13#10]),mtError,[mbAbort],0);
      MyBitmap.Free;
      Exit;
    end;
    if MyBitmap.Width > MyBitmap.Height then
    begin
      nFaktor := 241 / MyBitmap.Width;
      Image1.Height := Trunc(MyBitmap.Height * nFaktor) + 1;
    end
    else
    begin

      nFaktor := 241 / MyBitmap.Height;
      Image1.Width := Trunc(MyBitmap.Width * nFaktor) + 1;
    end;
    Image1.Picture.Bitmap.Assign(MyBitmap);
    Image1.Stretch := True;
    MyBitmap.Free;
    Screen.Cursor := crDefault;
  end;
end;