Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Treppchenbildung bei Verkleinerung von Jpg´s (https://www.delphipraxis.net/84260-treppchenbildung-bei-verkleinerung-von-jpg%B4s.html)

torud 14. Jan 2007 09:20


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;

SirThornberry 14. Jan 2007 09:22

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.

torud 14. Jan 2007 09:55

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?

Sko 14. Jan 2007 10:09

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;

torud 14. Jan 2007 10:49

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;

Khabarakh 14. Jan 2007 11:10

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