AW: Problem mit Skalierung eines Bitmap im BitBtn
Delphi-Quellcode:
:mrgreen:
BitBtn1.Glyph.LoadFromFile('E:\MaskLight\Programm\Masken\Achsen_MKS.bmp');
BitBtn1.Glyph.Canvas.StretchDraw(Rect(0, 0, BitBtn1.Width - 10, BitBtn1.Height - 10), BitBtn1.Glyph); BitBtn1.Glyph.Width := BitBtn1.Width - 10; BitBtn1.Glyph.Height := BitBtn1.Height - 10; // oder X := BitBtn1.Width - 10; Y := BitBtn1.Height - 10; BitBtn1.Glyph.LoadFromFile('E:\MaskLight\Programm\Masken\Achsen_MKS.bmp'); BitBtn1.Glyph.Canvas.StretchDraw(Rect(0, 0, X, Y), BitBtn1.Glyph); BitBtn1.Glyph.Width := X; BitBtn1.Glyph.Height := Y; |
AW: Problem mit Skalierung eines Bitmap im BitBtn
Zitat:
Ist auch nicht garantiert proportional, ausser die Quellbilder sind in der Richtung festgelegt. |
AW: Problem mit Skalierung eines Bitmap im BitBtn
Zitat:
Bringt bei mir nichts - also es verändert sich nichts |
AW: Problem mit Skalierung eines Bitmap im BitBtn
Wenn das Bild verkleinert wurde, dann ist das verkleinerte Bild ja nun kleiner, als das was geladen wurde ... also noch die Größe des Glyph an die Größe des verkleinerten Bildes anpassen. :angle:
Jetzt noch statt des StretchDraw das StretchBlt von DeddyH rein und man hat mit wenig Code ein wunderschönes Bild. Wenn jetzt die Größe nicht gefällt, dann kann man ja die Berechnung von X und Y entsprechend ändern. |
AW: Problem mit Skalierung eines Bitmap im BitBtn
Zitat:
|
AW: Problem mit Skalierung eines Bitmap im BitBtn
Was ist denn "bedingt"?
StretchDraw kopiert nur ganze Pixel (läßt also beim Verkleinern einfach welche web und beim Vergrößern werden welche mehrfach gezeichnet) und StretchBlt verrechnet die Pixel miteinander. Dafür sind Funktionen/Berechnungen wie in StretchDraw dann natürlich schneller, als aufwändigere Varianten, wie StretchBlt. (falls es mal auf Quantität ankommt und nicht auf Qualität) |
AW: Problem mit Skalierung eines Bitmap im BitBtn
Zitat:
Zitat:
|
AW: Problem mit Skalierung eines Bitmap im BitBtn
Ja, es kommt aber auch auf die Auflösung der Datei und die Größe des Glyphs an.
|
AW: Problem mit Skalierung eines Bitmap im BitBtn
Und die Art des Bildes.
Bilder mit wenige Struktur, wenig Farben und scharfen Farbgrenzen sehen mit der einen Methode ohne Kantenglättung schonmal besser (schärfer) aus, wärend deteilreiche Fotos mit Kantenglättung/Pixelverrechnung nicht so verpixelt wirken. |
AW: Problem mit Skalierung eines Bitmap im BitBtn
OK, OK, ich habe meine Routine noch etwas erweitert (und gleich noch eine potentielle Fehlerquelle eliminiert):
Delphi-Quellcode:
procedure StretchGraphic(const src, dest: TGraphic;
DestWidth, DestHeight: integer; Smooth: Boolean = true); var temp, aCopy: TBitmap; faktor: double; begin Assert(Assigned(src) and Assigned(dest)); if (src.Width = 0) or (src.Height = 0) then raise Exception.CreateFmt('Invalid source dimensions: %d x %d',[src.Width, src.Height]); if src.Width > DestWidth then begin faktor := DestWidth / src.Width; if (src.Height * faktor) > DestHeight then faktor := DestHeight / src.Height; end else begin faktor := DestHeight / src.Height; if (src.Width * faktor) > DestWidth then faktor := DestWidth / src.Width; end; try aCopy := TBitmap.Create; try aCopy.PixelFormat := pf24Bit; aCopy.Assign(src); temp := TBitmap.Create; try temp.Width := round(src.Width * faktor); temp.Height := round(src.Height * faktor); if Smooth then SetStretchBltMode(temp.Canvas.Handle, HALFTONE); StretchBlt(temp.Canvas.Handle, 0, 0, temp.Width, temp.Height, aCopy.Canvas.Handle, 0, 0, aCopy.Width, aCopy.Height, SRCCOPY); dest.Assign(temp); finally temp.Free; end; finally aCopy.Free; end; except on E: Exception do MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr. |
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