【发布时间】: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