3

我们有一个提供 8 位灰度图像的系统,无论是 tiff 还是 jpg 格式。但是,我们必须处理图像的组件要求图像为 8 位 jpg 格式。

当我使用 .Net 将 tiff 图像保存为 jpg 时,它会将其转换为 24 位图像。

有没有一种方法,希望简单快速,将 8 位灰度 tiff 图像转换为等效的 jpg?

4

2 回答 2

2

我试图并试图得出结论,我很抱歉:.Net 库的位图类不会将 JPEG 保存为 8bpp,即使明确说明并且数据是灰度的。

(注意:虽然在某些地方有说明,但 JPEG 格式确实支持 8bpp)。

将图像转换为灰度时,您可以找到将任何图像转换为灰度的代码片段。

使用该代码,我能够保存一个带有“.jpeg”扩展名的 8bpp 灰度图像实例,但说明 ImageFormat.Gif ......这是一个作弊......

我的发现作为解决方案显示了一种完全不同的方法。

FreeImage 库提供了强大的 API,包括解决您的问题所需的功能。

它的主页位于http://freeimage.sourceforge.net/faq.html

但是,我无法在我的 Win2008 + VS 2010 机器上轻松编译它。

要让它在现代环境中运行,应该付出很多努力。

在http://www.sambeauvois.be/blog/2010/05/freeimage-and-x64-projects-yes-you-can/中找到了一些关于如何完成的提示

祝你好运!

于 2013-02-04T09:25:53.670 回答
0
Image img = Image.FromFile(filePathOriginal);
Bitmap bmp = ConvertTo8bpp(img);
EncoderParameters parameters = new EncoderParameters();
parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 8);
bmp.Save(filePathNew, jpgCodec, parameters);
bmp.Dispose();
img.Dispose();

...

private static Bitmap ConvertTo8bpp(Image img) {
    var bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
using (var gr = Graphics.FromImage(bmp))
{
     gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
}

return bmp;
}
于 2013-02-04T01:53:47.607 回答