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


Log in to reply