SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

文字コードから画像ファイルを生成する

BMP構造とCを使った画像ファイル作成の説明

  • X ポスト
  • このエントリーをはてなブックマークに追加

本稿ではプログラムによって文字の画像ファイルを作成する方法を紹介します。まず始めにビットマップファイルの構造を説明し、その後、Cを使って文字コードから画像を生成するプログラムについて解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 文字コード関連の文書を書いていると「この文字の画像ファイルが欲しいな」というケースがよくあります。そんなときに、わざわざ画面に表示させてから、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バイトになっているはずです。

次のページ
大まかな流れ

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

さなみ(サナミ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1643 2008/01/18 23:31

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング