3

画像を 8 ビット グレースケールの tiff または jpg 形式で提供するシステムがあります。ただし、画像を処理する必要があるコンポーネントは、画像が 8 ビットの jpg 形式であることを想定しています。

.Net を使用して tiff 画像を jpg として保存すると、24 ビット画像に変換されます。

8 ビットのグレースケール tiff 画像を同等の jpg に変換する方法はありますか?

4

2 に答える 2

2

申し訳ありませんが、.Net ライブラリの Bitmap クラスは、明示的に指定されていて、データがグレースケールであっても、JPEG を 8bpp として保存しません。

(注: いくつかの場所で述べられていますが、JPEG 形式は 8bpp をサポートしています)。

画像をグレースケールに変換すると、任意の画像をグレースケールに変換するためのコード スニペットが見つかる場合があります。

そのコードを使用して、8bpp グレースケール イメージ インスタンスを「.jpeg」拡張子で保存できましたが、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/にあります。

幸運を!

于 2013-02-04T09:25:53.670 に答える
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;
}
于 2013-02-04T01:53:47.607 に答える