Alternative zu GetThumbnailImage gesucht.

vault-tec

Erfahrenes Mitglied
Hallo, Forum!


Ich hab mal wieder ein Problem...

Bereits seit einiger Zeit programmiere ich an einer Upload-Seite (in ASP.NET) für eine WebSite. Über diese soll es später den Kunden möglich sein, Banner (also Bilddateien) hochzuladen, sodass diese an entsprechenden Stellen präsentiert werden.

Das ganze funktioniert auch schon soweit ganz gut;
die Bilddateien werden hochgeladen, komprimiert, optisch zurecht-"geschrumpft" und es werden die entsprechenden Einträge in der Datenbank vorgenommen.

Leider funktioniert das Zurecht-"Schrumpfen" nur mit .bmp - und .jpg - , bzw. .jpeg - Dateien, nicht aber mit .gif's. :confused:
Schuld daran ist die GetThumbnailImage()-Methode, die sofern es sich um .gif's handelt, diese in viel zu schlechter Qualität ablegt, teilweise mit verfälschten Farben.

Um den Sachverhalt einmal zu veranschaulichen, hier die entsprechende Codestelle:
(Das ursprüngliche Seitenverhältnis wird hier beibehalten)

Code:
private Bitmap GetThumbnail(Bitmap bmp, int ofArtID)
{				
    // Neue Maße Speichern
    if(ofArtID==1)
    {
        int newWidth = 0;
        int newHeight = 0;
        // Orginalmaße speichern und Skalierfaktor berechnen
        int width = bmp.Width;
        int height = bmp.Height;
        double scaleFactor = (double)width / (double)height;
        newWidth = 178;
        newHeight = 96;
        if (newHeight * scaleFactor <= newWidth)
            newWidth = (int)(newHeight * scaleFactor); 
        else 
            newHeight = (int)(newWidth / scaleFactor);
        // Thumbnailbild erstellen und zurückliefern
        return ((Bitmap)bmp.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero));
    }
    else if(ofArtID==2||ofArtID==3)
        {
        int newWidth = 0;
        int newHeight = 0;
        // Orginalmaße speichern und Skalierfaktor berechnen
        int width = bmp.Width;
        int height = bmp.Height;
        double scaleFactor = (double)width / (double)height;
        newWidth = 625;
        newHeight = 235;
        if (newHeight * scaleFactor <= newWidth)
            newWidth = (int)(newHeight * scaleFactor); 
        else 
            newHeight = (int)(newWidth / scaleFactor);			
        // Thumbnailbild erstellen und zurückliefern
        return ((Bitmap)bmp.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero));
    }
    else
        return null;
}
Zunächst nochmals der Hinweis, dass obiges mit den anderen Dateitypen geklappt hat.
Meine Frage lautet nun: Gibt es eine Alternative zu GetThumbnailImage?
In der MSDN wird in meinem Fall empfohlen, die Graphics.DrawImage-Methode zu benutzen, um das Bild zu skalieren. :suspekt: Allerdings verstehe ich nicht ganz, wie das funktionieren soll, bzw. welche der 286.995 verschiedenen überladenen Varianten hier die beste wäre...
Oder bin ich die ganze Sache von vorneherein falsch angegangen?

Ich wäre für jeden Hinweis dankbar.

Gruß, Niko
 
Hallo Forum.

Ich habe inzwischen die (schmerzliche) Antwort auf meine Frage gefunden:
Die Methode GetThumbnailImage eignet sich wohl wirklich nur zum Erstellen von Thumbnails. Um Bilddateien vom Typ .gif, die größer als 32x32 sind größentechnisch zu verändern, muss man zwangsweise auf die Member der Image- bzw. Bitmap-Klasse zurückgreifen und ebendiese Veränderungen zu Fuß implementieren, da GetThumbnailImage zuviele Informationen über die Datei verliert.
Soviel zu meiner Erkenntnis. :rolleyes:

Gruß, Niko
 

Neue Beiträge

Zurück