Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Quadratische Thumbnails erstellen (https://www.delphipraxis.net/155428-quadratische-thumbnails-erstellen.html)

Matze 22. Okt 2010 19:30

AW: Quatratische Thumbnails erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Lies doch, was man dir schreibt und guck nicht nur auf geposteten Code. ;)
Ich habe doch oben ein mögliches Prinzip erklärt.

Anbei ein schnell zusammengetippeltes Beispiel. Es geht auch sauberer und mit weniger temporären Bildern. Nur so finde ich den Weg einleuchtender.
Hab's nicht ausgiebig getestet, sondern nur grob.

capo 22. Okt 2010 20:18

AW: Quatratische Thumbnails erstellen
 
Zitat:

Zitat von Bummi (Beitrag 1057225)
Delphi-Quellcode:
  if ext = 'BMP' then HDCImage.Picture.Bitmap.SaveToFile(dest)
  else SaveBMPasJPG(dest,HDCImage.Picture.Bitmap,qual);
  graphics.Free;
  HDCImage.Free;

end;

Hallo,

das wir dbei mir angemeckert:
Delphi-Quellcode:
SaveBMPasJPG
[DCC Fehler] frmMain.pas(214): E2003 Undefinierter Bezeichner: 'SaveBMPasJPG'
Woran liegt das?
Danke!

Bummi 22. Okt 2010 21:58

AW: Quatratische Thumbnails erstellen
 
ich hatte nur einen Auschnitt meiner Tools geschickt, hier der fehlende Teil.

Delphi-Quellcode:
Procedure SaveBMPasJPG(Const FN:String;BMP:TBitmap;Qual:Integer);
var
  jp:TJpegImage;
begin
      jp:=TJpegImage.Create;
      jp.CompressionQuality := qual;
      try
      with jp do
        begin
          Assign(BMP);
          SaveToFile(fn)
        end;
      finally
      jp.Free;
      end;
end;

jfheins 22. Okt 2010 22:42

AW: Quatratische Thumbnails erstellen
 
Das ganze nennt sich übrigens "quadratisch" - mit d ;)

capo 23. Okt 2010 08:57

AW: Quatratische Thumbnails erstellen
 
Zitat:

Zitat von Matze (Beitrag 1057253)
Lies doch, was man dir schreibt und guck nicht nur auf geposteten Code. ;)
Ich habe doch oben ein mögliches Prinzip erklärt.

Anbei ein schnell zusammengetippeltes Beispiel. Es geht auch sauberer und mit weniger temporären Bildern. Nur so finde ich den Weg einleuchtender.
Hab's nicht ausgiebig getestet, sondern nur grob.

Merkwürdig, aber deinen Beitrag habe ich die ganze Zeit nicht gesehen.
Gruss

capo 23. Okt 2010 10:18

AW: Quatratische Thumbnails erstellen
 
Zitat:

Zitat von jfheins (Beitrag 1057280)
Das ganze nennt sich übrigens "quadratisch" - mit d ;)

Hehe danke...und ich hatte extra schon darauf geachtet. Stress!

capo 2. Nov 2010 14:27

AW: Quadratische Thumbnails erstellen
 
Hallo,
ich habe mitlerweile eine Lösung gefunden, leider sehen die Thumbs entweder zu pixeli oder zu unscharf aus.
Hat jemand eine Idee?
So sieht mein Code momentan aus:

Delphi-Quellcode:
procedure SquareMyJPG(JPGFilePathSource, JPGFilePathDest: string;
  SquareLengthPx: Integer);
var
  JPGOrig, JPGThumbSquare: TJPEGImage;
  BMPThumbNoSquare, BMPThumbSquare: TBitmap;
  IsLandscape: Boolean;
begin
  JPGOrig := TJPEGImage.Create;
  try
    JPGOrig.LoadFromFile(JPGFilePathSource);

    IsLandscape := JPGOrig.Width > JPGOrig.Height;

    BMPThumbNoSquare := TBitmap.Create;
    try
      // Thumbnail proportional skalieren
      if IsLandscape then
      begin
        BMPThumbNoSquare.Height := SquareLengthPx;
        BMPThumbNoSquare.Width := Round(SquareLengthPx * JPGOrig.Width /
          JPGOrig.Height);
      end
      else
      begin
        BMPThumbNoSquare.Height := Round(SquareLengthPx * JPGOrig.Height /
          JPGOrig.Width);
        BMPThumbNoSquare.Width := SquareLengthPx;
      end;

      BMPThumbNoSquare.Canvas.StretchDraw(
        Rect(0, 0, BMPThumbNoSquare.Width, BMPThumbNoSquare.Height),
        JPGOrig
        );

      // Überflüssiges wegschnibbeln
      BMPThumbSquare := TBitmap.Create;
      try

        BMPThumbSquare.Width := SquareLengthPx;
        BMPThumbSquare.Height := SquareLengthPx;

        {
        if not IsLandscape then
          BMPThumbSquare.Canvas.Draw(
            -(BMPThumbNoSquare.Width - BMPThumbNoSquare.Height) div 2,
            0,
            BMPThumbNoSquare
          )
        else
          BMPThumbSquare.Canvas.Draw(
            -(BMPThumbNoSquare.Height - BMPThumbNoSquare.Width) div 2,
            0,
            BMPThumbNoSquare
          );
        }
        BMPThumbSquare.Canvas.CopyRect(Rect(0, 0, SquareLengthPx,
          SquareLengthPx), BMPThumbNoSquare.Canvas, Rect(0, 0, SquareLengthPx,
          SquareLengthPx));

        BMPThumbSquare.PixelFormat := pf24Bit;
        //   smoothH(BMPThumbSquare);
         // smoothV(BMPThumbSquare);
        JPGThumbSquare := TJPEGImage.Create;
        try
          //  JPGThumbSquare.Width := SquareLengthPx;
         // JPGThumbSquare.Height := SquareLengthPx;

          Antialiasing(BMPThumbSquare, Rect(0, 0, BMPThumbSquare.Width, BMPThumbSquare.Height), 10);
          // Sharpen(BMPThumbSquare,BMPThumbSquare,2);
          JPGThumbSquare.Assign(BMPThumbSquare);
          JPGThumbSquare.CompressionQuality := 100;
          JPGThumbSquare.Compress;
          JPGThumbSquare.Smoothing := not JPGThumbSquare.Smoothing;
          JPGThumbSquare.SaveToFile(JPGFilePathDest);

        finally
          FreeAndNil(JPGThumbSquare);
        end;
      finally
        FreeAndNil(BMPThumbSquare);
      end;
    finally
      //   BMPThumbNoSquare.SaveToFile('C:\bmpnosquare.bmp');
      FreeAndNil(BMPThumbNoSquare);
    end;
  finally

    FreeAndNil(JPGOrig);
  end;
end;

stahli 2. Nov 2010 17:13

AW: Quadratische Thumbnails erstellen
 
Zeig doch mal, was Du unter pixelig bzw. unscharf verstehst...

Matze 2. Nov 2010 18:31

AW: Quadratische Thumbnails erstellen
 
Zitat:

Zitat von capo (Beitrag 1059170)
ich habe mitlerweile eine Lösung gefunden ...

Hast meinen Anhang doch noch gesehen. ;)

Die Standardfunktionen in Delphi machen leider oft verpixelte Bilder. Wobei es irgendwo einen Code-Schnippsel gab, der das ganz gut hinbekommen hat. Ich finde ich auf Anhieb jedoch nicht.
Du kannst dir die Graphics32-Library mal ansehen. Damit erhältst du Ergebnisse wie aus einem guten Bildbearbeitungsprogramm.

Edit: Der Code aus dem SDC könnte es gewesen sein.

DeddyH 3. Nov 2010 08:23

AW: Quadratische Thumbnails erstellen
 
Würde es nicht genügen, SetStretchBltMode mit halftone aufzurufen und dann mit StretchBlt zu resizen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz