I beendete die FreeImageAPI DLL, mit einem C# Wrapper zu verbrauchen. Ich versuche, Bibliotheken von Drittanbietern zu vermeiden, aber ich denke nicht, dass es eine andere Wahl gibt. Es scheint eine ziemlich normale und gut benutzte Bibliothek zu sein.
In meinem Fall habe ich ein System.Drawing.Image
Objekt 'image'
, die dynamisch erstellt wurde - was ich möchte den Httpcontext Ausgangsstrom als ein komprimiertes Bild speichern. Beachten Sie, dass Image
nicht die erforderliche GetHbitmap()
Methode hat, aber Bitmap
tut.
// convert image to a 'FreeImageAPI' image
var fiBitmap = FreeImageAPI.FreeImageBitmap.FromHbitmap((image as Bitmap).GetHbitmap());
fiBitmap.ConvertColorDepth(FreeImageAPI.FREE_IMAGE_COLOR_DEPTH.FICD_08_BPP);
// see http://stackoverflow.com/questions/582766
MemoryStream ms = new MemoryStream();
fiBitmap.Save(ms, FreeImageAPI.FREE_IMAGE_FORMAT.FIF_PNG, FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.PNG_Z_BEST_COMPRESSION);
context.HttpContext.Response.OutputStream.Write(ms.ToArray(), 0, (int)ms.Length);
Mein 24kb Bitmap erst jetzt 9kb :-)
Tipp: Achten Sie darauf, beide haben 'FreeImageNET' und 'Freeimage' dlls in Ihrem bin zur Verfügung, wenn Sie es starten. Zum gegenwärtigen Zeitpunkt enthalten die C# -Beispielprojekte einen Verweis auf 'Library.DLL', die in ihrer Zip-Datei nicht zu existieren scheint. Die Verwendung von FreeImageNET.dll
und FreeImage.dll
funktioniert jedoch. Sie erhalten eine ärgerliche Datei nicht gefunden Fehler, wenn Sie nicht wissen, dass FreeImageNet
! = FreeImage
!
aber Photoshop macht es so einfach aussehen :-) Ich freue mich auf FreeImage.NET jetzt –
Or Das Bild kann trotzdem 32 Farben haben. In diesem Fall verlieren Sie nichts. – axk