在.Net 2.0中将8位灰度tiff图像转换为8位灰度jpg

时间:2013-01-23 11:55:21

标签: .net image-processing .net-2.0

我们有一个系统可以提供tiff或jpg格式的8位灰度图像。但是,我们处理图像的组件要求图像采用8位jpg格式。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

Convert an image to grayscale,您可能会发现代码snipet可以将任何图像转换为灰度。

使用该代码,我能够以'.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/

找到 祝你好运!

答案 1 :(得分: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;
}