Oder auch hier nochmal:
Delphi-Quellcode:
unit Unit6;
interface uses Vcl.ExtCtrls,
Vcl.Graphics;
type
TImageHelper =
class helper
for Vcl.ExtCtrls.TImage
public procedure makePretty(
const withOriginalImage: TGraphic);
end;
implementation uses Vcl.GraphUtil;
{ TImageHelper }
procedure TImageHelper.makePretty(
const withOriginalImage: TGraphic);
var
srcBitmap: TBitmap;
// Enthölt das Originalbild
dstBitmap: TBitmap;
// Speziell für die aktuellen Abmessungen
begin
srcBitmap := TBitmap.Create();
try
srcBitmap.Width := withOriginalImage.Width;
srcBitmap.Height := withOriginalImage.Height;
srcBitmap.Canvas.Draw(0, 0, withOriginalImage);
dstBitmap := TBitmap.Create();
try
dstBitmap.Width := self.Width;
dstBitmap.Height := self.Height;
// Skalierte Version in neues Bitmap zeichnen
if self.Height < self.Width
then
Vcl.GraphUtil.ScaleImage(
srcBitmap,
dstBitmap,
self.Height / srcBitmap.Height
)
else
Vcl.GraphUtil.ScaleImage(
srcBitmap,
dstBitmap,
self.Width / srcBitmap.Width
)
;
// imageComponent mit neuem Bild bestücken
self.Picture.Bitmap := dstBitmap;
finally
dstBitmap.Free();
end;
finally
srcBitmap.Free();
end;
end;
end.
Du musst dir natürlich noch eine Kopie des Originalbildes vorhalten um es dann in
makePretty(..)
reinstecken zu können. Dann kannst du, wenn du es brauchst, einfach sagen
image1.makePretty(originalImage)
.