我们有一个提供 8 位灰度图像的系统,无论是 tiff 还是 jpg 格式。但是,我们必须处理图像的组件要求图像为 8 位 jpg 格式。
当我使用 .Net 将 tiff 图像保存为 jpg 时,它会将其转换为 24 位图像。
有没有一种方法,希望简单快速,将 8 位灰度 tiff 图像转换为等效的 jpg?
我们有一个提供 8 位灰度图像的系统,无论是 tiff 还是 jpg 格式。但是,我们必须处理图像的组件要求图像为 8 位 jpg 格式。
当我使用 .Net 将 tiff 图像保存为 jpg 时,它会将其转换为 24 位图像。
有没有一种方法,希望简单快速,将 8 位灰度 tiff 图像转换为等效的 jpg?
我试图并试图得出结论,我很抱歉:.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/中找到了一些关于如何完成的提示
祝你好运!
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;
}