[D5] Jpg in TImage skalieren

Hi @ all,

ich möchte in einem TImage ein Jpeg anzeigen. TImage bietet aber nur an,
a) das Image auf Bildgröße aufzublasen,
oder
b) das Bild in TImage einzupassen, wobei das Bild aber verzerrt wird.

Ich möchte, daß das Bild in TImage eingepasst wird, ohne es dabei zu verzerren.
Mit TImage.Canvas.StretchDraw steht eine Methode dafür zur Verfügung, welche aber nur bei Bitmaps funktioniert. Die Jpeg steht aber in TImage.Picture.Graphic…

Ein einfaches TImage.Canvas.StretchDraw(r, TImage.Picture.Graphic) quittiert Delphi mit einer Exception…

Ich muß das Jpeg also irgendwie in ein Bitmapformat kriegen…
nur - wie ???

CU, Dirk

Für TImage-Typen, die keine automatische AspectRationkorrektur haben:

const R = 1; //Rand im AnzeigeFenster Original
procedure Tfrm_Main.BildEinpassen;
var ar,fw,fh : Real;
begin
if (Image1.Parent.ClientWidth > 0) and
(Image1.Parent.ClientHeight -R >0) //div0 -error vermeiden
then begin
ar := Image1.Picture.BitMap.Width / Image1.Picture.BitMap.Height ;
fw := Image1.Picture.BitMap.Width / Image1.Parent.ClientWidth;
fh := Image1.Picture.BitMap.Height / (Image1.Parent.ClientHeight -R);
if (fw>fh)
then begin
Image1.Width := Image1.Parent.ClientWidth - R - R;
Image1.Height := round(Image1.Parent.ClientWidth / ar);
Image1.Left := R;
Image1.Top := round(((Image1.Parent.ClientHeight )/ 2) - (Image1.Height / 2));
end
else begin
Image1.Height := Image1.Parent.ClientHeight - R - R;
Image1.Width := round((Image1.Parent.ClientHeight ) * ar) - R - R;

Image1.Left := round((Image1.Parent.ClientWidth / 2) - (Image1.Width / 2)) + R;
Image1.Top := R;
end;