【问题标题】:Convert bitmap from 16bpp to 8bpp in C#在 C# 中将位图从 16bpp 转换为 8bpp
【发布时间】:2013-02-10 17:55:55
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    该问题是由于在图像保存之前释放内存流造成的。

    我相信 GDI+ 需要内存流持续存在,而您仍在使用从内存流创建的图像。

    Microsoft Support article.

    【讨论】:

    • @user694501 - 你想让我看的答案在哪里?
    【解决方案3】:

    AForge.Net 有很多免费的(在较宽松的 GPL 许可下)例程,用于此类更改等等。 16bpp到8bpp的转换就像this一样简单。

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2019-02-10
      • 2023-03-14
      • 1970-01-01
      • 2021-12-13
      • 2019-12-03
      • 1970-01-01
      • 2016-05-18
      • 2012-10-19
      相关资源
      最近更新 更多