Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Qualität tImage

  Alt 22. Dez 2014, 12:49
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) .
  Mit Zitat antworten Zitat