Delphi-PRAXiS
Seite 3 von 3     123   

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)

Bummi 3. Nov 2010 08:42

AW: Quadratische Thumbnails erstellen
 
Hast Du es mal mit GDI+ und
graphics.SetInterpolationMode(InterpolationModeHig hQualityBicubic);

Positing #3

versucht, IMHO das Optimum

Satty67 3. Nov 2010 10:52

AW: Quadratische Thumbnails erstellen
 
Schnell versucht (evtl. falsch)
Delphi-Quellcode:
SetStretchBltMode(ThumbBitmap.Canvas.Handle, HALFTONE);
.
bringt keine Besserung. Weder mit Canvas.StrechDraw, noch direkt mit StretchBlt().

In C# gibt es eine Thumbnail-Methode im Image-Objekt, das sehr gute Ergebnisse liefert. Basiert auch auf GDI+. Würde also auch Bummis Rat empfehlen.

Bummi 4. Nov 2010 18:53

AW: Quadratische Thumbnails erstellen
 
Falls noch Interesse besteht, ich habe es mal maximal eingedampft
Delphi-Quellcode:
//2010 Thomas Wassermann www.explido-software.de
interface
uses Windows, Classes, Graphics,GDIPAPI,GDIPOBJ, StdCtrls, jpeg, ActiveX;

Procedure ScaleImage(source:TGraphic;dest:TCanvas;DestRect:Trect;Center:Boolean=true);overload;
implementation


Procedure ScaleImage(source:TGraphic;dest:TCanvas;DestRect:Trect;Center:Boolean=true);overload;
var
  graphics : TGPGraphics;
  image: TGPImage;
  width, height: Integer;
  faktor:Double;
  STR : TMemoryStream;
  X, Y:Double;
begin
  STR := TMemoryStream.Create;
  source.SaveToStream(STR);
  STR.Position := 0;
  image:= TGPImage.Create(TStreamAdapter.Create(Str));
  try
  width := image.GetWidth;
  height := image.GetHeight;
  if ((DestRect.Right - DestRect.Left) / width) < ((DestRect.Bottom -DestRect.Top)/Height) then faktor := (DestRect.Right - DestRect.Left) / width else faktor:= ((DestRect.Bottom -DestRect.Top)/Height);
  Faktor := ABS(Faktor);
  if Center then
      begin
        X := ((Destrect.Right - Destrect.Left) - faktor * width ) / 2;
        Y := ((Destrect.Bottom - Destrect.Top) - faktor * Height ) / 2;
      end
  else
      begin
        X := Destrect.Left;
        Y := Destrect.Top;

      end;
  graphics := TGPGraphics.Create(dest.Handle);
  try
    graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
    graphics.DrawImage( image, MakeRect(X, Y , faktor * width, faktor * height), 0, 0, width, height, UnitPixel);
  finally
    graphics.Free;
  end;
  finally
  STR.Free;
  image.Free;
  end;
end;
end;

Bummi 15. Dez 2010 13:40

AW: Quadratische Thumbnails erstellen
 
Zur besseren Wiederverwendbarkeit der TGPImages aus TGraphics habe ich eine kleine Wrapperklasse geschrieben, wer's brauchen kann...
Delphi-Quellcode:
Type TGPImageWrapper=Class(TObject)
       private
       FImage: TGPImage;
       FStream: TMemoryStream;
       public
       Constructor Create(AGraphic:TGraphic);
       Destructor Destroy;override;
       Public
       Property Image:TGPImage read FImage;
End;

________
{ TGPImageWrapper }

constructor TGPImageWrapper.Create(AGraphic: TGraphic);
begin
  FStream := TMemoryStream.Create;
  AGraphic.SaveToStream(FStream);
  Fimage:= TGPImage.Create(TStreamAdapter.Create(FStream));
end;

destructor TGPImageWrapper.Destroy;
begin
  FImage.Free;
  FStream.Free;
  inherited;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.
Seite 3 von 3     123   

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