C# ラッパーを使用してFreeImageAPI DLLを使用することになりました。サードパーティのライブラリは避けようとしていますが、他に選択肢はないと思います。それはかなり標準的でよく使われているライブラリのようです。
私の場合、動的に作成されたSystem.Drawing.Image
オブジェクトがあります'image'
。これを HttpContext 出力ストリームに圧縮画像として保存したいと考えています。必要なメソッドImage
はありませんが、あることに注意してください。GetHbitmap()
Bitmap
// 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);
私の 24kb のビットマップは現在 9kb です :-)
ヒント:ビンを実行するときは、'FreeImageNET' と 'FreeImage' dll の両方をビンで使用できるようにしてください。現時点では、C# サンプル プロジェクトには、zip ファイルに存在しないように見える「Library.DLL」への参照が含まれています。使用FreeImageNET.dll
してもFreeImage.dll
機能します。FreeImageNet
!= FreeImage
!を認識しないと、迷惑なファイルが見つからないというエラーが表示されます。