
答え1
BMP のドキュメントは次のとおりです。https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29
短縮形は次のとおりです。
- 14バイトのBMPヘッダー(ファイル情報)
- 40バイトのDIBヘッダー(画像情報)
- ピクセル
DIB ヘッダー セクション内に、ピクセル寸法を表す 5 という 2 つの値と、24 ビット カラー (RGB) を表す 16 進数 (18) という値があります。
特に興味深いのは、Wiki の「例 1」です。これは、ここにあるのと同様の 2x2 イメージの HEX ダンプを示しています。いくつか注意点があります。
- バイトは視覚的には 2 桁の数字の対です (画像の最初のバイトは 42 です)。
- カウントは 0 から始まるので、「オフセット 31」は 32 番目のバイトになります。
- 数字はすべて 16 進数なので、16 進数 (10) = 10 進数 (16) です。変換に手助けが必要な場合は、Windows の電卓を「プログラマー モード」に設定して使用できます。
- 「バイト順序」は低から高の順なので、「05 00 00 00」という4バイトの値は「00 00 00 05」として理解される必要があります。
- bmpのRGBトリプレットが逆になっている
16 進ダンプとドキュメントに基づくと、画像は各ピクセルを非圧縮の RGB トリプレットとして保存しています。最初のピクセルはトリプレットです24 1c ed
が、これは反転されているため、16 進数 (ed1c24) であり、実際には赤色です。500
ピクセルの行ごとにパッドがあることに注意してください。ドキュメントには、これは「バイト アラインメント」用であると書かれています。
したがって、ピクセルを赤から青に変更するには、3 つの要素のうちの 1 つを から に変更し24 1c ed
ますed 1c 24
。
ソフトウェアに関しては、ファイル (またはコピー) を 16 進エディターで開き、変更を加えて保存します。テキスト シンボル「0」は 2 進数値の 0 と同じではないため、単にテキスト エディターを「テキスト編集モード」で使用するだけでは不十分です。
オープンソースの Notepad++ には、プラグインを介した 16 進編集機能があります。
ペイントが画像をどのように作成するかという大きな疑問については、プログラムはドキュメントと標準を使用してプロセスを自動化します。これは主に慣例の問題です。「画像ストリーム」(ピクセルデータ)は、メモリに保存され、操作されます。似ている圧縮されていない画像ファイルで見られるような方法です。