【问题标题】:How to convert a JPG image to an 8-bit PNG image and save in C#?如何将 JPG 图像转换为 8 位 PNG 图像并保存在 C# 中?
【发布时间】:2014-02-10 15:38:49
【问题描述】:

我使用 C# 中的网络摄像头捕获了 JPG 图像并将其存储在一个文件夹中。

现在我想将其转换为 8 位 PNG 图像。

我检查了整个互联网和 Stack Overflow,但没有一个建议的解决方案适合我。

这是我目前使用的:

Bitmap img = new Bitmap(imgPath);
Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);

for (int I = 0; I <= img.Width - 1; I++)
    for (int J = 0; J <= img.Height - 1; J++) 
        img8.SetPixel(I, J, img.GetPixel(I, J));

但是,这会引发以下异常:

SetPixel 不允许用于索引像素图像。

【问题讨论】:

  • 有什么原因不能使用img.Save(@"c:\somefile.png", System.Drawing.Imaging.ImageFormat.Png)
  • 首先,这是一种非常低效的图像转换方式 - Steven 的方式要好得多。此外,转换为 8 位 PNG 图像的问题更大,因为您必须构建调色板并使用它对数据进行编码。如果您真的想要 8 位 PNG,您应该使用支持此功能的转换库,并注意这可能会导致数据丢失(从 JPG 转换时,这几乎是给定的)。您可以为此使用 GDI+,例如 wischik.com/lu/programmer/1bpp.html 或 Antoine 的回答。
  • Sajid,你可以使用 GIF 或 TIFF 吗?
  • 你好,不,我不能使用 Gif。但是可以使用 TIFF。
  • @Steven Hansen 我不想按原样保存图像。我想要这个像素深度为 8 位。

标签: c# asp.net image-conversion 8-bit


【解决方案1】:

您可以尝试使用ImageMagick,它包含一个转换文件的实用程序。您可以使用命令行界面或 .Net 连接器,例如 magick.Net

使用命令行,您可以启动一个运行以下命令的进程:

convert [yourfile.jpg] -depth 8 [yourfile.png]

这可能有点矫枉过正,但这是我所知道的处理图像的唯一选择。

【讨论】:

  • 您好,我需要这个用于 Asp.net .. 它可以在 Asp.net Web 应用程序中工作吗?
  • 你需要在你的服务器上安装 imagemagick,但是没有什么可以阻止这个解决方案在 ASP.Net 中工作。
  • 您不需要安装 ImageMagick。您只需要安装 Visual C++ Redistributable (magick.codeplex.com/documentation)
【解决方案2】:

不,我不能使用 Gif。但是可以使用 TIFF。

Image orgBmp = Image.FromFile(@"fname.jpg");

var tiffEncoder = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
                  .First(e => e.FormatDescription == "TIFF");


EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, (long)ColorDepth.Depth8Bit);

orgBmp.Save(@"fname.tif", tiffEncoder, parameters);

【讨论】:

  • 如果只有 BMP 和 PNG 有一些参数!
【解决方案3】:

您必须自己执行一些编程。你可以在这里找到示例逻辑和代码http://codingresolved.com/discussion/2185/save-png-image-as-8bit-format-in-c

【讨论】:

  • 链接坏了(这就是为什么你应该发布代码,而不是link它),它专门转换为灰度,这不是什么问的问题。
猜你喜欢
  • 1970-01-01
  • 2013-05-10
  • 2012-06-01
  • 1970-01-01
  • 2018-12-05
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
相关资源
最近更新 更多