Converting 8-bit grayscale tiff image to 8-bit gra

2019-01-25 22:10发布

We have a system that provides images in 8-bit grayscale either tiff or jpg formats. However, the component we have to process the images expects image to be in 8-bit jpg format.

When I use .Net to save the tiff images as jpg it convets it to 24-bit image.

Is there a way, hopefully simple and fast, to convert 8-bit grayscale tiff images to equivalent jpg?

2条回答
够拽才男人
2楼-- · 2019-01-25 22:20
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;
}
查看更多
Ridiculous、
3楼-- · 2019-01-25 22:39

I tried and tried just to conclude that I'm sorry: .Net library's Bitmap class DOES NOT save JPEG as 8bpp even when explicitly stated and data is in grayscale.

(note: although stated in some places, JPEG format DOES support 8bpp).

At Convert an image to grayscale you may find code snipet to convert to grayscale any Image.

Using that code, I was able to save a 8bpp grayscale Image instance with '.jpeg' extension, but stating ImageFormat.Gif... that's a cheat...

My findings show as solution an entirely different approach.

The FreeImage library offers powerful APIs, including the feature needed to solve your problem.

It's home page is at http://freeimage.sourceforge.net/faq.html

But, I could not easily compile it in my Win2008 + VS 2010 machine.

One ought to sweat a lot to make it run on modern environments.

Some hints on how to accomplish that are found at http://www.sambeauvois.be/blog/2010/05/freeimage-and-x64-projects-yes-you-can/

Good luck!

查看更多
登录 后发表回答