SHOEISHA iD

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

連載記事

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

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
特集記事

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

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
" ); }

おすすめ

アクセスランキング

  1. 1
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!? NEW
  2. 2
    関数型プログラミング言語「Gleam v1.7.0」リリース NEW
  3. 3
    NVIDIA、AIスーパーコンピューター「Project DIGITS」を発表 NEW
  4. 4
    【成長するための1on1完全攻略術】意義を理解して効果的なミーティングを行うための準備をしよう! NEW
  5. 5
    Meta社開発のSSG、「Docusaurus 3.7」リリース NEW
  1. 6
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  2. 7
    Salesforce案件の平均年収は? フリーランス・複業・副業の求人マッチング「SOKUDAN」が調査 NEW
  3. 8
    なりたいエンジニアになるために、自分らしいキャリアを描くための3つのポイントとは? NEW
  4. 9
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  5. 10
    生成AIでは対応が難しい検索もある? Elasticsearchが語るこれからの「検索」のポイント

アクセスランキング

  1. 1
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!? NEW
  2. 2
    関数型プログラミング言語「Gleam v1.7.0」リリース NEW
  3. 3
    NVIDIA、AIスーパーコンピューター「Project DIGITS」を発表 NEW
  4. 4
    【成長するための1on1完全攻略術】意義を理解して効果的なミーティングを行うための準備をしよう! NEW
  5. 5
    Meta社開発のSSG、「Docusaurus 3.7」リリース NEW
  6. 6
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  7. 7
    Salesforce案件の平均年収は? フリーランス・複業・副業の求人マッチング「SOKUDAN」が調査 NEW
  8. 8
    なりたいエンジニアになるために、自分らしいキャリアを描くための3つのポイントとは? NEW
  9. 9
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  10. 10
    生成AIでは対応が難しい検索もある? Elasticsearchが語るこれからの「検索」のポイント
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  7. 7
    Google、社内AIエージェント「Google Agentspace」発表
  8. 8
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  9. 9
    「CUDA」 ~マンガでプログラミング用語解説
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!

イベント

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

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

メールバックナンバー

アクセスランキング

  1. 1
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!? NEW
  2. 2
    関数型プログラミング言語「Gleam v1.7.0」リリース NEW
  3. 3
    NVIDIA、AIスーパーコンピューター「Project DIGITS」を発表 NEW
  4. 4
    【成長するための1on1完全攻略術】意義を理解して効果的なミーティングを行うための準備をしよう! NEW
  5. 5
    Meta社開発のSSG、「Docusaurus 3.7」リリース NEW
  1. 6
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  2. 7
    Salesforce案件の平均年収は? フリーランス・複業・副業の求人マッチング「SOKUDAN」が調査 NEW
  3. 8
    なりたいエンジニアになるために、自分らしいキャリアを描くための3つのポイントとは? NEW
  4. 9
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  5. 10
    生成AIでは対応が難しい検索もある? Elasticsearchが語るこれからの「検索」のポイント

アクセスランキング

  1. 1
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!? NEW
  2. 2
    関数型プログラミング言語「Gleam v1.7.0」リリース NEW
  3. 3
    NVIDIA、AIスーパーコンピューター「Project DIGITS」を発表 NEW
  4. 4
    【成長するための1on1完全攻略術】意義を理解して効果的なミーティングを行うための準備をしよう! NEW
  5. 5
    Meta社開発のSSG、「Docusaurus 3.7」リリース NEW
  6. 6
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  7. 7
    Salesforce案件の平均年収は? フリーランス・複業・副業の求人マッチング「SOKUDAN」が調査 NEW
  8. 8
    なりたいエンジニアになるために、自分らしいキャリアを描くための3つのポイントとは? NEW
  9. 9
    Renewer、Tips集「生成AI × 勉強法ガイドブック 2025」を公開
  10. 10
    生成AIでは対応が難しい検索もある? Elasticsearchが語るこれからの「検索」のポイント
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  7. 7
    Google、社内AIエージェント「Google Agentspace」発表
  8. 8
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  9. 9
    「CUDA」 ~マンガでプログラミング用語解説
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!