漢字コード「EUC-JP」を用いて美咲フォントをアクセスする方法を示します。美咲フォントは 8×8 ドットの日本語ビットマップフォントで、JIS 第一・第二水準をサポートし、、区点コードによりアクセスできます。一部の記号を除いた全ての文字は 7×7 ドットの範囲に収まっているため、文字同士を隣接させても行間・字間が確保できます。

美咲フォントのBMP形式へのファイル変換

美咲フォントを「8×8 ドット日本語フォント「美咲フォント」」からダウンロードします。今回はビットマップで使用するため、「PNG 形式 (ビットマップ画像)のmisaki_png_2015-04-10.zip 」を選択します。解凍してゴシックフォント「misaki_gothic.png」を選択し、Windows標準の「ペイント」ソフトでファイルを開きます。次のように表示されます。

美咲フォントビットマップ

次の手順でペイントソフトを用いてBMP形式に変換します。

  • ホームのメニューで「回転」→「上下反転」を行い、画像を反転させます。これは、BMP形式では最後のビットから順に変換されてファイルに保存されるためです。(反転については、ペイントソフトによる表示と対応づけられるように行っています)
  • ファイルメニューで、「名前を付けて保存」を選択し、表示されたファイル保存ダイアログの「ファイルの種類」を「モノクロビットマップ」を選択して保存します。

美咲フォントへのアクセス仕様

上記で作成したBMP形式の美咲フォント(JISコード)をEUC-JPでアクセスします。JISコードは、EUCコードから識別コード「A0A0」を引けば得られます。例えばEUC-JPコードで「あ」は「A4A2」となり、区点(JIS)コードだと「0402」となります。美咲フォントのBMPファイルを読み込んで二次元配列に保存し、漢字コードをEUC-JPコード~区点コードに変換し、それぞれ縦方向に区「04」、横方向に点「02」でアクセスできる仕様とします。プログラムでは配列の引数は「0」から始まるので-1されるので、「あ」の場合はfontbuf[3][1]でアクセスします。
美咲フォントをBMPファイル化するときは、いくつか気を付ける部分があります。

  • 画像の天地や左右が逆になります
  • 白と黒が逆になります
  • 横方向点は96バイトの長さになる。これは、横方向は4バイトの倍数という仕様になっているためです。

画像の天地や左右が逆になるので、前の項目で示したように、画像をペイントソフトで回転させています。また、白と黒が逆になるので、次の項目のように、プログラムによりif文を用いて反転させています。ペイントソフトでBMPファイルに変換すると、752ドットx752ドットのファイルになり、1文字8ドットで計算すると94文字x94文字のフォントが登録されます。ただし、仕様上横方向は94ではなく96となり2バイトのダミーが入ります。

変換後のBMPファイルをバイナリエディタで表示させたものを次に示します。
62バイトのヘッダーが最初に含まれ、次に横方向に最初の1ドット文のデータが表示されます。96バイト目からは、2番目のドットの横方向のデータが表示されます。

BMPファイルのバイナリダンプ

変換後のBMPファイルをペイントソフトで表示させ、左最下部の画像をキャプチャしたものです。最下部の1ドット目の左から右へドットがヘッダ後の画像データに設定されます。

ペイントソフトによるBMPファイルの表示

フォントパターンダンププログラムの作成

フォントパターンを「XX」でダンプするプログラムを作成します。

  • 13行目のFontData[94][96]は、本来はフォント数は94×94文字ありますが、横方向(つまり点)は4byte単位に構成されるため「96」としています。
  • 38行目のif文は、8ビット分、ビットが立っているかをチェックし、ビットが立っていればスペース、ビットが立っていなければ「XX」を表示します。
#include <stdio.h>
#include <stdlib.h>

FILE *bmpr;
int column, row;
int i,k;
long s;
char buf[1];
int ku,ten;

char font_path[]   = "code/misaki_gothic_lcd.bmp"; //フォントファイルパス

unsigned char bhd[62],FontData[94][96];

int main(int argc,char *argv[]){
	
	bmpr=fopen(font_path,"rb");
	
	fread(bhd,1,62,bmpr); 		// ヘッダファイルの読み込み
	
	fread(FontData,1,96*94,bmpr);	// 画像データの読み込み
	
	s=0;
	for(k=0; k<8 ;k+=1)
	{
//		ku = 3;// 大文字あ
//		ten = 1;
//		ku = 2;//数字1
//		ten = 0x10;
		ku = 2;//英字B
		ten = 33;
		
		buf[0]=FontData[(8*ku)+k][ten];		
		
		printf("%08x %02x ",s,buf[0]);
		i=0x80;
		while(i>0) {
			if((buf[0]&i)!=0) printf("  ");
			else printf("XX");
			i>>=1;
		}
		printf("\n");
		s++;
	}
	
	fclose(bmpr);
}

コンパイル・リンクは次のコマンドで実行します。

$ gcc -o characcs characcs.c

フォントパターンダンププログラムの実行

作成したプログラムを次のコマンドで実行します。

例1 大文字「あ」の指定

$ sudo ./characcs
00000000 df     XX
00000001 83   XXXXXXXXXX
00000002 df     XX
00000003 c3     XXXXXXXX
00000004 95   XXXX  XX  XX
00000005 4d XX  XXXX    XX
00000006 9b   XXXX    XX
00000007 ff

例2 数字「1」の指定

$ sudo ./characcs
00000000 ef       XX
00000001 cf     XXXX
00000002 ef       XX
00000003 ef       XX
00000004 ef       XX
00000005 ef       XX
00000006 c7     XXXXXX
00000007 ff

例3 英字「B」の指定

$ sudo ./characcs
00000000 83   XXXXXXXXXX
00000001 bd   XX        XX
00000002 bd   XX        XX
00000003 83   XXXXXXXXXX
00000004 bd   XX        XX
00000005 bd   XX        XX
00000006 83   XXXXXXXXXX
00000007 ff