Grafiken besser skalieren (resample)?
-
Hi,
ich bin gerade dabei ein Programm zu schreiben, welches Bilder kleiner skalieren soll.
Ich habe hierfür die Vorlage aus der FAQ genommen, doch das Ergebnis ist leider nicht so der bringer im Vergleich mit anderen Alternativen wie einen Grafikprogramm oder PHP (Funktion imageCopyResampled()).
Hier erstmal mein derzeit verwendeter Code:
TRect ARect; Graphics::TBitmap *bmp = new Graphics::TBitmap(); TJPEGImage *jpg = new TJPEGImage(); jpg->LoadFromFile("D:\\test.jpg"); // gewünschte neue Abmessungen festlegen bmp->Width = 520; bmp->Height = 347; // Rect mit den gleichen Abmessungen definieren und das per // StretchDraw vergrösserte JPEG auf das Bitmap zeichnen ARect = Rect(0, 0, 520, 347); bmp->Canvas->StretchDraw(ARect, jpg); // Inhalt des Bitmap auf das JPEG übertragen, speichern jpg->Assign(bmp); jpg->ProgressiveEncoding = true ; jpg->ProgressiveDisplay = true ; jpg->Smoothing = true ; jpg->CompressionQuality = 100 ; jpg->SaveToFile("d:\\test2.jpg"); delete jpg; delete bmp;
Wäre toll, wenn einer von Euch eine Alternative kennen würde.
Das Ausgangsbild hat eine Auflösung von 3888x2592 Pixeln.
Viele Grüße
Heinz
-
das was du erreichen willst, ist schon etwas komplizierter. einfaches runterskalieren ohne die pixelfarben anzufassen, liefert halt nur schlechte ergebnisse. um bessere qualität zu erreichen, musst du die neuen pixelwerte aus den alten werten interpolieren.
z.b. mittels einem Lanczos-Filter: http://en.wikipedia.org/wiki/Lanczos_resampling
ein paar Info und Ergebenisse von Filtern: http://www.mediachance.com/pbrush/help/resize.html
Pascal-Code zum Resamplen (ziemlich viel, musste mal schauen)
http://fantasy.myserver.org/trac/kicoy/browser/trunk/lib/kol/KOLGraphicEx.pas?rev=17&format=txt
-
Hallo
GDI+ kann auch in verschiedenen Qualitätsstufen Bilder skalieren. Vielleicht ist da die Qualität besser ?!?
Pronto451