BMP Skalierung mit Antialiasing (Glättung)
-
Hallo,
kennt jemand eine Möglichkeit bzw. Komponente die ein skalieren von bmp mit Glättung ermöglicht?
Per StrechDraw werden beim verkleinern Pixel rausgeschnitten D.h. bei 50% fehlt jeder 2te Pixel was zu unschönen Kanten führt.
Gruß Schnebs
-
[
SetStretchBltMode (Canvas->Handle, HALFTONE);
](http://msdn.microsoft.com/en-us/library/dd145089(VS.85).aspx)
Wenn es etwas wohldefinierter sein soll, sieh mal bei Wikipedia unter Multivariate interpolation und Image scaling nach.
Edit: Typographie.
-
Hmm... das mit dem
SetStretchBltMode (Canvas->Handle, HALFTONE);
bringt irgendwie nichts.... Und das, was auf der Microsoft und auf den Wikipediaseiten steht versteh ich nicht so ganz....
Schnebs
-
Schnebs schrieb:
Hmm... das mit dem
SetStretchBltMode (Canvas->Handle, HALFTONE);
bringt irgendwie nichts....
Du kannst nicht TCanvas::StretchDraw zum Zeichnen benutzen, da diese Funktion aus einem mir nicht ganz nachvollziehbarem Grund nur HALFTONE benutzt, wenn die bpp-Zahl des Zielkontextes <= 8 sowie kleiner als die bpp-Zahl des Bitmaps ist. Wenn du StretchBlt() direkt aufrufst, sollte es funktionieren.
Beachtest du zusätzlich noch den Hinweis in der Dokumentation hinsichtlich SetBrushOrgEx(), sieht das Ergebnis so aus:void halftoneStretchDraw (TCanvas* dstCanvas, TRect dstRect, TCanvas* srcCanvas, TRect srcRect, DWORD rop = SRCCOPY) { TPoint brushOrigin; GetBrushOrgEx (dstCanvas->Handle, &brushOrigin); SetStretchBltMode (dstCanvas->Handle, HALFTONE); SetBrushOrgEx (dstCanvas->Handle, brushOrigin.x, brushOrigin.y, &brushOrigin); StretchBlt (dstCanvas->Handle, dstRect.left, dstRect.top, dstRect.Width (), dstRect.Height (), srcCanvas->Handle, srcRect.left, srcRect.top, srcRect.Width (), srcRect.Height (), rop); }
-
Für das Skalieren von Bildern verwende ich meisst Gdiplus
erzeugt "schönere" skalierungen.
-
VergissEs schrieb:
Für das Skalieren von Bildern verwende ich meisst Gdiplus
erzeugt "schönere" skalierungen.Und wie funktioniert das dann?
gruß Schnebs
-
Hi,
die GDI+ ist eine Erweiterung des Graphics Device Interface (GDI). Abhänging von der BCB-Version ist sie verfügbar.
Du musst schauen, ob du die gdiplus.h einbinden kannst.
mfg
kpeter
-
Einbinden kann ichs... Allerdings schmeißt mir c++ builder dann diese fehlermeldungen vor:
[url=http://img19.imageshack.us/my.php?image=fehlerhgr.jpg][img=http://img19.imageshack.us/img19
-
Sorry für Doppelpost: Hier der richtige link http://yfrog.com/0jfehlerhgrj
-