我们有一个系统可提供8位灰度tiff或jpg格式的图像。但是,我们必须处理图像的组件需要图像为8位jpg格式。在.Net 2.0中将8位灰度tiff图像转换为8位灰度jpg
当我使用.Net将tiff图像保存为jpg格式时,它将它转换为24位图像。
有没有一种方法,希望简单和快速,将8位灰度tiff图像转换为相应的JPG格式?
我们有一个系统可提供8位灰度tiff或jpg格式的图像。但是,我们必须处理图像的组件需要图像为8位jpg格式。在.Net 2.0中将8位灰度tiff图像转换为8位灰度jpg
当我使用.Net将tiff图像保存为jpg格式时,它将它转换为24位图像。
有没有一种方法,希望简单和快速,将8位灰度tiff图像转换为相应的JPG格式?
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;
}
ColorDepth不受Image.Save for ImageFormat.Jpeg ...虽然优雅和直接,但此代码不起作用。 –
我试了又试只是为了得出结论,我很抱歉:NET库的Bitmap类DOES NOT JPEG保存为8bpp的,即使明确说明和数据是在灰度。 (注:虽然在某些地方声明,JPEG格式DOES支持8bpp)。
在Convert an image to grayscale你可能会发现代码snipet转换为灰度任何图像。
使用的代码,我才得以保存“.JPEG”扩展名的8bpp的灰度图像的实例,但指出ImageFormat.Gif ...这是个骗子......
我的研究结果表明作为解决方案完全不同的方法。
FreeImage库提供了强大的API,包括解决您的问题所需的功能。
它的主页是http://freeimage.sourceforge.net/faq.html
不过,我是不会轻易编译它在我的Win2008 + VS 2010的机器。
一个人应该汗流to背,才能在现代环境中运行。
就如何实现这一目标的一些提示在http://www.sambeauvois.be/blog/2010/05/freeimage-and-x64-projects-yes-you-can/
好运发现!
您是否有一些目标组件可以接受的示例jpg文件?我怀疑它们也是24位图像(jpg的标准),但红色,绿色和蓝色通道中的每一个都会保存相同的数据。 – ChrisF
非常隐晦,GDI +不支持它。尝试使用BitmapPalettes.Gray256调色板的JpegBitmapEncoder类。 –
@ChrisF,我不是jpg专家,但这是Windows和IrfanView告诉我的。例如,如果我查看jpg文件的属性,则会看到位深度为8.我会看看是否可以在某处上传示例图片。 – TheBlueSky