2

問題No1。 私自身の関連する問題

ここで次の質問をしました

さて、問題2です。

生のピクセル データから 16 ビット (モノクロ) 画像を開こうとすると、エラーが発生します。私は Bitmap のような作成で PixelFormat.Format16bppGrayscale を使用しているため

Bitmap bmp = new Bitmap(Img_Width, Img_Height,PixelFormat.Format16bppGrayscale);

グーグルで調べたところ、Format16bppGrayscale がサポートされていないことがわかったので、以下のようにコードを修正しました。

 PixelFormat format = PixelFormat.Format16bppRgb565;
 Bitmap bmp = new Bitmap(Img_Width, Img_Height, format);
 Rectangle rect = new Rectangle(0, 0, Img_Width, Img_Height);
 BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);
 Marshal.Copy(rawPixel, 0, bmpData.Scan0, rawPixel.Length);
 bmp.UnlockBits(bmpData);

驚くべきことは、pixelFormat を変更したため、現在画像を取得していることです。しかし、問題は、私のモノクロ (グレースケール) 画像がさまざまな色に見えることです。

元の外観を取得するにはどうすればよいですか。グレースケールの方法をいくつか試しましたが、うまくいきませんでした。アンセーフなコードを教えてください。ありがとう、

4

2 に答える 2

2

BobPowell の GDI+ FAQ には、 grayscale について少し説明があります。.NET の 16 bpp は機能しません。すべてを 32 bpp で行う必要があり、変換には外部ツールを使用する必要があります。幸いなことに (?)、ほとんどの場合、TIFF 画像を使い続けることができます。また、このスレッドが役立つ場合があります。

于 2009-04-28T12:57:01.410 に答える
-1

パレットをグレースケールパレットに変更する必要があります。8bppIndexedのデフォルトのパレットは256色です。次のように変更できます。

ColorPalette pal = myBitmap.Palette;

for (int i = 0; i < pal.Entries.Length; i++)
    pal.Entries[i] = Color.FromArgb(i, i, i);

myBitmap.Palette = pal;
于 2009-07-02T10:32:13.773 に答える