4

元の bpp で画像を処理して保存する必要があります (1 - BnW の場合、8 - グレーの場合、24 - カラー)。処理後、私は常に24bppを持っています(Aforge.Netで処理しているため)。元の bpp を保存関数に渡し、次のコードを保存に使用しています。

private static Bitmap changePixelFormat(Bitmap input, PixelFormat format)
    {
        Bitmap retval = new Bitmap(input.Width, input.Height, format);
        retval.SetResolution(input.HorizontalResolution, input.VerticalResolution);
        Graphics g = Graphics.FromImage(retval);
        g.DrawImage(input, 0, 0);
        g.Dispose();
        return retval;
    }

私が通過するとき:

PixelFormat.Format8bppIndexed

次の行で、「グラフィックス オブジェクトはインデックス付きピクセル形式で画像を作成できません」という例外が発生します。

Graphics g = Graphics.FromImage(retval);

次のコードを試しました:

Bitmap s = new Bitmap("gray.jpg");
        Bitmap NewPicture = s.Clone(new Rectangle(0, 0, s.Width, s.Height),                   PixelFormat.Format8bppIndexed);

この「NewImage」の後、PixelFormat 8bppIndexed がありますが、NewImage を保存すると、次のようになります。

NewPicture.Save("hello.jpg", ImageFormat.Jpeg);

hello.jpg は 24bpp です。

元の画像の bpp と画像形式を維持する必要があります。

Bitmap.Save が Bitmap の PixelFormat を無視するのはなぜですか?

================================================== =====

みんなありがとう、私は解決策を見つけました: http://freeimage.sourceforge.net/license.html

この無料ライブラリの助けを借りて、画像 (特に JPEG ) をグレースケール 8 ビットで保存できます。

4

4 に答える 4

5

JPEG 画像形式がインデックス付き画像をサポートしていないことはほぼ間違いありません。したがって、 を指定して画像を作成しPixelFormat.Format8bppIndexedたとしても、JPEG として保存しようとすると、GDI+ によって別の形式に変換されます。この場合、すでに 24 bpp であると判断しています。

代わりに、画像を BMP または GIF として保存する必要があります。例えば:

NewPicture.Save("hello.jpg", ImageFormat.Bmp);

ウィキペディアで、インデックス付きカラーをサポートする画像ファイル形式の表を参照してください。

于 2011-01-13T12:24:44.777 に答える
4

これは、ビットマップを 1bpp/8bpp ビットマップに変換するコードです。C# では 1bpp/8bpp。

changePixelFormat メソッドで、変換する必要のある fixel 形式を確認できます。1bpp または 8 bpp の場合はリンクのコードを使用し、他のすべての形式の場合はコードを使用します。

Graphics.FromImage ドキュメントにはコメントがあります:

画像がインデックス付きピクセル形式の場合、このメソッドは例外をスローし、「インデックス付きピクセル形式の画像から Graphics オブジェクトを作成することはできません」というメッセージを返します。インデックス付きピクセル形式を次のリストに示します。

Format1bppIndexed

Format4bppIndexed

Format8bppIndexed

新しい部分:

これは私が短いグーグルで見つけたものです:

8bpp グレースケール画像と 8bpp jpg は、gdiplus バージョン 1.0 ではサポートされていません。Windows 7 には、グレースケール イメージとより強化されたコーデック サポートをサポートする新しいバージョンの gdiplus があります。

8bpp インデックス付き jpeg 画像は、Microsoft の WIC API でサポートされています。

Microsoft のダウンロード サイトから WIC エクスプローラーをダウンロードして、自分で試すことができます。

GDI+ 8 ビットの読み込み/保存のバグ

標準 JPEG は 24 ビット画像のみをサポートします。

于 2011-01-13T12:41:47.657 に答える
0

真の 8 ビット グレースケール ビットマップ イメージを探している場合は、詳細な StackOverflow 投稿を作成しました。Windows 7 だけでなく、どのオペレーティング システム (Windows/Mac/Linux) でも動作します。

于 2011-04-23T14:57:29.143 に答える