Entwickler-Ecke
Multimedia / Grafik - Bild skaliert zeichnen
Flamefire - Fr 21.01.11 16:29
Titel: Bild skaliert zeichnen
Ich habe in einer Komponente eine Funktion, die Bilder skaliert zeichnet und dazu GDI+ verwendet.
Die Funktion ist die hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TGpGraphics.DrawImage(Image: TGPImage; X, Y, Width, Height: Integer); begin if ((Image.Width <= 10) and (Width > Image.Width)) or ((Image.Height <= 10) and (Height > Image.Height)) then DrawSmallStretchedImage(Image, X, Y, Width, Height) else GdipDrawImageRectI (fGraphics, Image.fHandle, X, Y, Width, Height); end; |
Das Problem ist, dass er beim verkleinern die Bilder sehr unschön aussehen lässt. Es fehlen dann ein paar Linien.
Gibts da ne bessere Variante?
jaenicke - Fr 21.01.11 17:03
Mir fiele da so auf die Schnelle ein vorher ein Antialiasing durchzuführen bzw. beides zu kombinieren.
bummi - Fr 21.01.11 17:34
ich weiß nicht welche GDI+ Implementierung Du verwendest, aber vielleicht kannst Du mit meinem folgenden Schnippsel was anfangen..
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| graphics := TGPGraphics.Create(HDCImage.Canvas.Handle); graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic); graphics.DrawImage( image, MakeRect(destx, desty , faktor * width, faktor * height), 0, 0, width, height, UnitPixel); |
Flamefire - Sa 22.01.11 23:54
Hilft leider nicht :(
Gleiches Ergebnis.
Zlatan - Mi 26.01.11 17:56
hast du es schon mal bei google versucht
Flamefire - Mi 26.01.11 18:50
Jep. Hab am Ende gefunden, dass es auf ein Canvas gezeichnet wird und ich mit SetStretchBltMode(ahDC, HALFTONE) die Qualität extrem verbessern konnte.
Habs vergessen hier zu schreiben. sry
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!