0

我有一个 16bpp 的位图。我想将该图像在我的 ASP.NET 端转换为 8bpp 图像。

我尝试了很多在互联网上找到的选项,但对我没有任何作用。

我也试过这样:C# Converting 32bpp image to 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 中创建 1 bpp 单色位图。查看此链接,它也适用于 8 bpp

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

希望这会有所帮助!

于 2013-02-25T14:50:06.200 回答
0

AForge.Net有很多免费的(在较小的 GPL 许可下)例程,用于此类更改等等。16bpp 到 8bpp 的转换就是这么简单。

于 2015-06-02T15:52:00.807 回答