0

画像のスクリーンショットをバイト配列として取得します。サイズを縮小するために、このイメージをより低いビットイメージに変換するにはどうすればよいですか? 画像全体で 10 色しかないので、これを行うには何らかの回避策が必要だと思います。ヒントはありますか?

4

1 に答える 1

1

パレット化された画像ファイルとして保存できます。bmp画像がタイプの変数に保持されていると仮定しますBitmap。この場合mStreamはであるため、メモリに保存できます。MemoryStream

bmp.Save(mStream, Imaging.ImageFormat.Gif)
bmp.Dispose

gif形式は、RGBバッファではなくビットプレーンを使用するため、最大256色までのさまざまなパレットサイズをサポートします。あなたの場合、それはおそらく16色のファイルとして保存されるでしょう。GIFはLZW圧縮を使用するため、結果のファイルのサイズは小さくなる傾向があります。

GIFとほぼ同じ動作をするPNG-8形式もあります。

ビットマップの初期化を呼び出すには、次のコマンドを使用します。

mStream.Seek(0, SeekOrigin.Begin)
Dim bmp As Bitmap = Bitmap.FromStream(mStream)
...
bmp.Dispose

残念ながら、インデックス付きのビットマップを使用してGraphicsオブジェクトを作成することはできません。そうでない場合、論理的なアプローチは、画面からピクセル形式のビットマップにデータをコピーすることですPixelFormat.Format4bppIndexed

ただし、インデックス付き形式のビットマップにグラフィックを作成すると、例外が発生します。基本的に、データを手動で変換してコピーする必要があります。したがって、この回答での私の提案は、画像が頻繁に必要とされない場合はおそらくより便利です。

于 2012-11-22T06:59:09.560 に答える