Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
Delphi 2006 Professional
|
TBitmap(32) unter Beibehaltung der Proportionen skalieren
11. Jun 2006, 17:18
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:
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=Chakotay1308]Code-Formatierung. Mfg, Chakotay1308[/edit]
[edit=fkerber]Neu gespeichert wegen Syntax-Highlighting. Mfg, fkerber[/edit]
Lukas Erlacher Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
|
|
Zitat
|