在C#中将位图从16bpp转换为8bpp

时间:2013-02-25 14:40:39

标签: c# asp.net .net windows image

我有一个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);
        }
    }

3 个答案:

答案 0 :(得分:1)

问题是由于在保存图像之前处理内存流造成的。

我相信GDI +要求在您使用从内存流创建的图像时内存流仍然存在。

请参阅Microsoft Support article.

答案 1 :(得分:0)

我使用一个小帮助函数在.NET中创建1 bpp单色位图。查看此链接,它也适用于8 bpp

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

希望这可以提供帮助!

答案 2 :(得分:0)

AForge.Net有一个很好的免费(根据较小的GPL许可证)例程来进行此类更改以及更多内容。将16bpp转换为8bpp就像this一样简单。