我们有一个系统可以提供tiff或jpg格式的8位灰度图像。但是,我们处理图像的组件要求图像采用8位jpg格式。
当我使用.Net将tiff图像保存为jpg时,它会将其转换为24位图像。
有没有办法,希望简单快速地将8位灰度tiff图像转换为等效的jpg?
答案 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;
}