web-dev-qa-db-ja.com

「ペンと紙」でビットマップ画像を作成するにはどうすればよいですか?

これは、赤で色付けされた5x5ビットマップの16進ダンプです。

enter image description here

私の質問は、ビットマップの色をたとえばに変更するために、(ペイントなどのツールを使用せずに)16進値のみを変更するにはどうすればよいですか?緑の色(0,255,0)またはそのことについての色は?

ある程度、ペイントのようなツールは、ビットマップを保存するために、描画したピクセルをどのように16進数に変換しますか?

1
P. Ktinos

BMPのドキュメントは次のとおりです。 https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29

短い形式は次のとおりです。

  • 14バイトBMPヘッダー(ファイル情報)
  • 40バイトのDIBヘッダー(画像情報)
  • ピクセル

DIBヘッダーセクション内で、ピクセル寸法の2つの値5と、24ビットカラー(RGB)のhex(18)の値を確認できます。

特に興味深いのは、ウィキの「例1」です。これは、ここにあるものと同様の2x2画像のHEXダンプを示しています。いくつかの注意:

  • 視覚的には、バイトは2桁のカプレットです(画像の最初のバイトは42です)。
  • カウントは0から始まるため、「オフセット31」は32番目のバイトです。
  • 数値はすべてHEXであるため、hex(10)= dec(16)です。変換のヘルプが必要な場合は、「プログラマーモード」に設定されたWindows電卓を使用できます。
  • 「バイトオーダー」は下位から上位であるため、「05 00 0000」の4バイト値は「0000 0005」として理解する必要があります。
  • bmpのRGBトリプレットが逆になります

16進ダンプとドキュメントに基づいて、画像は各ピクセルを非圧縮RGBトリプレットとして保存しています。最初のピクセルはトリプレット24 1c edですが、これは逆になっているため、実際には赤色であるhex(ed1c24)になります。 5ピクセルのすべての行の後に00パッドがあることに注意してください。ドキュメントには、これは「バイトアラインメント」用であると記載されています。

したがって、ピクセルを赤から青に変更するには、トリプレットの1つを24 1c edからed 1c 24に変更します。

ソフトウェアに関しては、16進エディターでファイル(またはコピー)を開き、変更を加えて保存します。テキスト記号「0」は2進数の0と同じではないため、「テキスト編集モード」でテキストエディタを使用するだけでは不十分です。

オープンソースのNotepad ++には、プラグインを介した16進編集機能があります。

Paintがどのように画像を作成するかというより大きな問題に関しては、プログラムはドキュメントと標準を使用してプロセスを自動化します。そのほとんどは慣例の問題です。 「画像ストリーム」(ピクセルデータ)は、非圧縮画像ファイルに見られるように同様の方法でメモリに保存および操作されます。

2
Yorik