0

私は16bppのビットマップを持っています。ASP.NET側でその画像を8bpp画像に変換したいと思います。

私はインターネットで見つけた多くのオプションを試しましたが、何もうまくいきません。

私もそのように試しました:C#32bpp画像を8bppに変換する

しかし、ファイルを保存したい場合、次のエラーが発生します。

例外の詳細:System.Runtime.InteropServices.ExternalException:GDI+で一般的なエラーが発生しました。

Line 278:                    System.Drawing.Image img2 = Convert(bm_resize);//byteArrayToImage(gray);
Line 279:                    
Line 280:                    img2.Save(helper+"grey2.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
Line 281:                }
Line 282:

私の問題の正しい方法はありますか?

完全なコード:

System.Drawing.Image img2 = Convert(bm_resize);
img2.Save(path+"test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);


public static System.Drawing.Image Convert(Bitmap oldbmp)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            oldbmp.Save(ms, ImageFormat.Gif);
            ms.Position = 0;
            return System.Drawing.Image.FromStream(ms);
        }
    }
4

3 に答える 3

1

この問題は、画像が保存される前にメモリストリームを破棄することによって発生します。

GDI +では、メモリストリームから作成されたイメージを操作している間、メモリストリームを保持する必要があると思います。

Microsoftサポートの記事を参照してください。

于 2013-02-25T15:09:24.410 に答える
0

小さなヘルパー関数を使用して、.NETで1bppのモノクロビットマップを作成します。このリンクをチェックしてください、それは8bppにも最適です

http://www.wischik.com/lu/programmer/1bpp.html

これがお役に立てば幸いです。

于 2013-02-25T14:50:06.200 に答える
0

AForge.Netには、そのような変更やその他多くの無料の(Lesser GPLライセンスの下での)ルーチンの優れたコレクションがあります。16bppから8bppへの変換はこれと同じくらい簡単です

于 2015-06-02T15:52:00.807 に答える