「Windows API/図形の描画」の版間の差分
削除された内容 追加された内容
{{Nav}},s/命令/関数/ |
s/機械語/バイナリーデーター/ See 機械語 タグ: 2017年版ソースエディター |
||
416 行
== 画像ファイルのバイナリ ==
{{-}}
[[File:Bitmap structure on hex edit japanese.svg|thumb|900px|バイナリエディタで見た場合のビットマップの
{{-}}
たとえばビットマップ画像を作りたい場合、
すると、たいていのデスクトップ用OS(ウィンドウズも含む)では、ビットマップ形式の
なお、ネットや専門書の解説では画像フォーマットの仕様を説明するためによくC言語の「構造体」の書式が説明されるが、しかし、その構造体を入力しても、画像は生成されない。
433 行
この「42 4D」という冒頭の数字を識別子とすることで、ファイルの種類を認識している。
誤解しないでほしいが、けっして「BM」と
ネット検索で調べる場合は「42 4D」というキーワードを付け加えて「ビットマップ 42 4D」などで調べれば、ビットマップ画像のバイナリでの扱いに関する有益な情報が入手しやすいだろう。
455 行
</pre>
stiring に限らず一般にバイナリエディタの画面の構成は、上記のようになっている。(なお、「ファイル」→「ダンプイメージの保存」などの操作で、上記のような
また、そのようなダンプイメージを出力することを、俗に(ぞくに)「ダンプする」などとIT業界では言う。
さて、このダンプイメージのうち、
<pre>
42 4D 82 00 00 00 00 00 00 00 76 00 00 00 28 00
489 行
</pre>
は、ファイル内容の
このアスキーは、
503 行
</pre>
は、単に何バイト目かをあらわしているだけである。これは、
526 行
;各ヘッダの名称
{{-}}
[[File:Bitmap structure on hex edit japanese.svg|thumb|900px|バイナリエディタで見た場合のビットマップの
{{-}}
545 行
ビットマップ情報ヘッダの長さは40バイトで固定である。
552 行
さて、ビットマップ構造体の図を、ダンプイメージと照らし合わせてみよう。
{{-}}
[[File:Bitmap structure on hex edit japanese.svg|thumb|900px|(再掲)バイナリエディタで見た場合のビットマップの
{{-}}
595 行
1段目アドレスのABCDの部分にある「 76 00 00 00」は、まず意味は10進数で118である。7×16+6=118 より。
で、「
なお、数え方は左上の「42 4D」ですでに2バイトである。 この調子で118バイト目を探すと
674 行
それを横5×縦3ピクセルにしたファイルの
<pre>
728 行
なお、画像データの読み方は、
なので、2色以上を使った画像で、調べてみましょう。
775 行
さて、幅30×高さ10 の画像は、画像で見ると、青い帯は下側にあります。しかし
このように、上下が反転しています。そういう仕様だからです。
781 行
;Linux のxxdコマンド
Linux だと、この
<code>xxd</code> というコマンドを使えばいい。Fedora 31 では標準では、この <code>xxd</code> がついていない。なのでFedoraにこのコマンドをインストールするために vim-common をインストールする必要がある。Fedora ではvim-common に <code>xxd</code> が含まれている。
xxdはもともと、
引数に -r をつける事により、16進ダンプを
たとえば、なんらかのテキストエディタ(Fedora標準の gedit でもよい)に、下記のテキスト(これはstirringで出力したテキストから、上2行の見出しを除去しただけの物である)をそのままコピーペーストしてテキストエディタに貼り付けし、普通に「test」などの名前で保存しよう。この段階では、ファイル「test」は、まだ単なるテキストファイルである。
827 行
が必要である。
だが、これを使わなくても、C言語で直接に書いてしまう方法もある。C言語で書き込みの際、書き込みモードに「wb」のようにbをつけるだけで
なお、文字列「1」はアスキーコードでは16進数「31」なので、一対一対応しないので、C言語で書く場合には注意しよう。
|