![]() |
TBitmap(32) unter Beibehaltung der Proportionen skalieren
Hallo, diese zwei Funktionen nehmen ein TBitmap(32) und einen Punkt, der die Ausmaße des skalierten Bildes hält, und geben das skalierte Bild zurück.
Bei der Graphics32-Funktion ist durch Verwendung der Stretchfilter sfMitchell zum Vergrößern und sfLanczos zum Verkleinern eine sehr viel höhere Qualität gewährleistet, afaik stretcht das TBitmap nur linear.
Delphi-Quellcode:
[edit=Chakotay1308]Code-Formatierung. Mfg, Chakotay1308[/edit]
uses Math;
uses GR32; {----------------------------------------------------------------------------- Function: ResizeBitmap(32) Author: DGL-luke Date: 11-Jun-2006 Arguments: src: TBitmap(32); dst: TPoint Result: TBitmap(32) stretches a TBitmap(32) into a rect, keeping proportions Ein TBitmap(32) wird in ein Rechteck einskaliert, die Proportionen werden beibehalten. -----------------------------------------------------------------------------} function ResizeBitmap32(src: TBitmap32; dst: TPoint): TBitmap32; var scalex, scaley, scale: single; sf: TStretchFilter; begin scalex := dst.X / src.Width; scaley := dst.Y / src.Height; scale := Min(scalex, scaley); if scale > 1 then sf := sfMitchell // magnifying filter else sf := sfLanczos; Result := TBitmap32.Create; Result.Width := Ceil(src.Width * scale); Result.Height := Ceil(src.Height * scale); Result.Clear(clWhite32); Result.StretchFilter := sf; Result.Draw(rect(0,0,Result.Width,Result.Height), // over the whole bitmap rect(0,0,src.Width,src.Height), // the whole src src); end; uses Graphics; function ResizeBitmap(src: TBitmap; dst: TPoint): TBitmap; var scalex, scaley, scale: single; begin scalex := dst.X / src.Width; scaley := dst.Y / src.Height; scale := Min(scalex, scaley); Result := TBitmap.Create; Result.Width := Ceil(src.Width * scale); Result.Height := Ceil(src.Height * scale); Result.Canvas.StretchDraw(rect(0,0,Result.Width,Result.Height), src); end; [edit=fkerber]Neu gespeichert wegen Syntax-Highlighting. Mfg, fkerber[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz