![]() |
Treppchenbildung bei Verkleinerung von Jpg´s
Hallo Wissende,
mit folgender Routine erstelle ich eine Verkleinerung eines gewählten JPG´s. Die Grössenverhältnisse stimmen dabei. Es wird also nix verzerrt. Leider sind die Ergebnisse aber mehr als miserabel. Es sind Treppchen zu sehen, da wo schräge Kanten verlaufen sollten. Wie kann ich das Problem umgehen respektive lösen?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tbmpDest : TBitmap32; tbmpSource: TBitmap32; SaveDlg: TSaveDialog; begin with TOpenPictureDialog.Create(nil) do begin if Execute then begin tbmpSource := TBitmap32.Create; tbmpSource.LoadFromFile(FileName); tbmpDest := TBitmap32.Create; tbmpDest.SetSize(550, 412); tbmpDest.Draw(tbmpDest.BoundsRect, tbmpSource.BoundsRect, tbmpSource); Image1.Picture.Bitmap.Assign(tbmpDest); SaveDlg := TSaveDialog.Create(nil); if SaveDlg.Execute then tbmpDest.SaveToFile(SaveDlg.FileName); SaveDlg.Free; tbmpDest.Free; end; end; end; |
Re: Treppchenbildung bei Verkleinerung von Jpg´s
bist du dir sicher das es sich um ein JPEG handelt? Verarbeitet TBitmap32 auch andere Typen als Bitmaps? Wenn Treppen entstehen wird es wohl an der Verkleinerungsroutine liegen.
|
Re: Treppchenbildung bei Verkleinerung von Jpg´s
Na klar bin ich mir sicher. Wie sonst hätte überhaupt ein Ergebnis zustande kommen können? Egal. Es hat ja funktioniert, aber leider ist das Problem das Gleiche. Wie Du sehen kannst, ist die Verkleinerungsroutine nicht meine, sondern ich habe lediglich die neuen Grössenangaben übergeben. Diese habe ich auch nur mit einem Grafiktool herausbekommen....
Und nun? |
Re: Treppchenbildung bei Verkleinerung von Jpg´s
Du könntest es mal so probieren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var R: TKernelResampler; tbmpDest : TBitmap32; tbmpSource: TBitmap32; SaveDlg: TSaveDialog; begin with TOpenPictureDialog.Create(nil) do begin if Execute then begin tbmpSource := TBitmap32.Create; tbmpSource.LoadFromFile(FileName); R := TKernelResampler.Create(tbmpSource); //<-einen Resampler fürs verkleinern benutzen R.Kernel := TCosineKernel.Create; tbmpDest := TBitmap32.Create; tbmpDest.SetSize(550, 412); tbmpDest.Draw(tbmpDest.BoundsRect, tbmpSource.BoundsRect, tbmpSource); Image1.Picture.Bitmap.Assign(tbmpDest); SaveDlg := TSaveDialog.Create(nil); if SaveDlg.Execute then tbmpDest.SaveToFile(SaveDlg.FileName); SaveDlg.Free; tbmpDest.Free; end; end; end; |
Re: Treppchenbildung bei Verkleinerung von Jpg´s
Danke für den Tipp, aber ich erhalte eine Meldung:
"Undefinierter Bezeichner: TKernelResampler" Was fehlt mir noch? Vielleicht was in den Uses? Die sehen bei mir so aus:
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ExtDlgs, GR32, GR32_Transforms, Jpeg; |
Re: Treppchenbildung bei Verkleinerung von Jpg´s
Auch für die GR32-Lib soll es so etwas wie eine Hilfe geben, in der die Units zu allen Klassen stehen. Achte aber darauf, dass du wirklich Version 1.8.1 hast, davor gab es statt Resamplern StretchFilter.
@SirThornberry: Egal welche Lib/Klasse man benutzt, Grafikmanipulationen können nur auf reine Bitmaps angewandt werden. Sowohl VCL als auch GR32 müssen alle JPEGs also auf jeden Fall erst zu ihrer vollen Größe dekomprimieren, dann in die Bitmap-Klasse laden und schließlich wieder komprimieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 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