はじめに
文字コード関連の文書を書いていると「この文字の画像ファイルが欲しいな」というケースがよくあります。そんなときに、わざわざ画面に表示させてから、PrintScreenでコピーして、ペイントに貼り付けて、範囲指定してから切り取って……という手順で画像ファイルを作成するのは面倒です。1つならそれほどではないかもしれませんが、いくつもの文字となると手作業で行うのはかなり大変です。
というわけで、プログラムから文字の画像ファイルを作成する方法を紹介したいと思います。
対象読者
- 文字の画像ファイルが欲しい方
- C言語およびWindowsAPIプログラミングについて知識のある方
- 画像ファイルの動的な生成に興味のある方
必要な環境
- Windows VistaまたはWindows XP
- WindowsAPIに対応したCコンパイラ
- バイナリエディタ
ただし、Windows XPの場合は、事前にJIS2004対応パッチを適用しておいてください。
モノクロ ビットマップの構造
具体的なプログラムについて紹介する前に、まずモノクロ(白黒2色)ビットマップの構造について説明したいと思います。
ビットマップのファイル構造
詳細は参考資料を見てもらいたいのですが、ビットマップファイルの構造は、
BITMAPFILEHEADER構造体(14バイト) |
BITMAPINFOHEADER構造体(40バイト) |
RGBQUAD構造体×色数(4バイト×色数) |
・ |
・ |
・ |
画像データ |
のようになっています。
BITMAPFILEHEADER構造体やBITMAPINFOHEADER構造体は、ビットマップファイルに関する情報が書き込まれています。RGBQUAD構造体は色情報を定義するためのものです。
モノクロビットマップファイルの場合、2色ですから、
BITMAPFILEHEADER構造体(14バイト) |
BITMAPINFOHEADER構造体(40バイト) |
RGBQUAD構造体(4バイト) |
RGBQUAD構造体(4バイト) |
画像データ |
という構造になります。2つのRGBQUAD構造体には、それぞれ黒と白の色情報が入っています。
画像データのサイズ
画像データのサイズですが、モノクロビットマップは1ピクセルにつき1ビットのデータを使います。そのため、1バイトで8ピクセルになります。
例えば、幅256ピクセル×高さ256ピクセルの画像データのサイズは、
256×256÷8=8192バイト
になります。
試しに、ペイントで256x256のモノクロビットマップファイルを作成してみてください。ファイルサイズは、14+40+4+4+8192=8254バイトになっているはずです。
ただ、注意が必要なのは、ビットマップファイルの画像データは、画像幅が4バイト(32ビット)境界になるようにしないといけないことです。モノクロビットマップの場合、4バイト(32ビット)は32ピクセルに相当しますので、画像幅が32の倍数でない場合は、32の倍数になるまで0で埋めてデータの大きさを調節します。
例えば、幅60ピクセル×高さ60ピクセルの画像データのサイズは、
60×60÷8=450バイト
にはならず、
64×60÷8=480バイト
になります。
ペイントで60×60のモノクロビットマップファイルを作成してみてください。ファイルサイズは、14+40+4+4+480=542バイトになっているはずです。