Also ich hab da schon öfter selber was geschrieben...
Delphi-Quellcode:
function ResizePropertional(Src: TBitmap32; AvailDim: TPoint): TBitmap32;
var factor: real; //Skalierungsfaktor
NewDim: TPoint; //Neue Ausmaße
begin
factor := Min(Src.Width / AvailDim.X, Src.Height / AvailDim.Y); // Skalierungsfaktor ermitteln
NewDim.X := Floor(Src.Width * factor); //Neue Breite errechnen
NewDim.Y := Floor(Src.Height * factor); // " Höhe "
Result := TBitmap32.Create;
Result.Width := NewDim.X;
Result.height := NewDim.Y;
Result.Resampler := TKernelResampler.Create(Result);
with Result.Resampler as TKernelResampler do //Kernelmode (=tatsächlicher Filter) zuweisen
if (factor > 1) then//Vergrößerung
KernelMode := kmMitchell
else //Verkleinerung
KernelMode := kmLanczos;
Result.Draw(Src.Width,Src.Height,Result,Result.Width,Result.Height);
end;
So in etwa müsste es gehen, aus dem Stegreif getippt.
Bin mir bei der Zuweisung der Resampler und beim zeichnen aber überhaupt nicht sichwer, ob das so kompiliert geschweige denn funktioniert.
Sollte es das tun, wäre es mir natürlich eine Ehre, den Code für die CodeLib vorzuschlagen
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