Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StretchBtl verhunzt die Bitmap (https://www.delphipraxis.net/149950-stretchbtl-verhunzt-die-bitmap.html)

xZise 3. Apr 2010 11:39


StretchBtl verhunzt die Bitmap
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin,
ich habe eine Grafik die ich mithilfe von Andorra2D speichere und dann als Bitmap hole:
Delphi-Quellcode:
bmp := TBitmap.Create;
bmp2 := TBitmap.Create;
try
  bmp.Width := ICON_WIDTH;
  bmp.Height := ICON_WIDTH;
  AImgBuf.Texture.SaveToGraphic(bmp2);
  bmp2.SaveToFile(ExtractFilePath(ParamStr(0)) + AName + '.pre.bmp');

  StretchBlt(bmp.Canvas.Handle, (ICON_WIDTH - w) div 2, (ICON_WIDTH - h) div 2, w, h, bmp2.Canvas.Handle,
               r.Left, r.Top, r.Right - r.Left, r.Bottom - r.Top, SRCCOPY);

  bmp.SaveToFile(ExtractFilePath(ParamStr(0)) + AName + '.post.bmp');

  ilPreview.Add(bmp, nil);
finally
  bmp2.Free;
  bmp.Free;
end;
Das Problem ist, dass wenn ich das von 48x48 auf 32x32 herunterskaliere, wird das Bild dabei irgendwie "schlechter".

MfG
Fabian

sx2008 3. Apr 2010 12:28

Re: StretchBtl verhunzt die Bitmap
 
Zitat:

Zitat von xZise
wenn ich das von 48x48 auf 32x32 herunterskaliere, wird das Bild dabei irgendwie "schlechter".

Das ist vollkommen normal bei diesen kleinen Auflösungen; es gibt halt keine halben Pixel.
Aus diesem Grund werden Icons z.B. in verschiedenen Grössen gespeichert.
Verkleinerte Icons sind fast immer nachträglich von Hand optimiert oder sogar komplett neu designed.

xZise 3. Apr 2010 12:40

Re: StretchBtl verhunzt die Bitmap
 
Moin,
das war mir schon klar, aber gerade der Mittlere Teil sieht erheblich schlechter aus. Aber dann muss ich echt sehen was ich da machen kann, weil 48px sind zu viel und alles nochmal mit 32px o.O

MfG
Fabian

Gausi 3. Apr 2010 12:46

Re: StretchBtl verhunzt die Bitmap
 
Hallo,
setz mal vor dem Aufruf von StretchBlt ein
Delphi-Quellcode:
SetStretchBltMode(bmp.Canvas.Handle, HALFTONE);
Damit gibt es meistens wesentlich bessere Resultate.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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