ページ 11

一部のフォントの使用が出来ない

Posted: 2013年2月08日(金) 20:03
by 青虫8826
初めまして

検索で調べたり、フォントの呼び出し方を変えるなど試行錯誤を重ねたのですが、
どうしても出来なかったので質問させて頂きました。

「Palatino Linotype」というフォントを使いたいのですが、
件名の通り、何故か使用が出来ません。
それ以外にも、全角の含まれていないフォント名のものも使用が出来ませんでした
(全てのフォントを検証をしてないのでそうとは断定出来ませんが...)。

半角の場合、特別な呼び出し方があるのでしょうか?
それとも、コンパイラなどの不具合が原因なのでしょうか?

OSはWindows Vista、コンパイラはMicrosoft Visual C++ 2010 Express、ライブラリはDirectXです。

プログラムの開示は、フォントの呼び出し方をどのようにしても出来ない為無意味だと思うので、
勝手ながらに省略させて頂きました。
Cの知識は最近知ったばかりの素人で、趣味の時間にCのお勉強を充てている程度です。

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月08日(金) 20:28
by h2so5
青虫8826 さんが書きました: 「Palatino Linotype」というフォントを使いたいのですが、
件名の通り、何故か使用が出来ません。
それ以外にも、全角の含まれていないフォント名のものも使用が出来ませんでした
(全てのフォントを検証をしてないのでそうとは断定出来ませんが...)。
フォント名に全角文字が含まれているフォントは使用できるということですか?
青虫8826 さんが書きました: プログラムの開示は、フォントの呼び出し方をどのようにしても出来ない為無意味だと思うので、
勝手ながらに省略させて頂きました。
どのようにしたのかが重要ですので、コードを貼ってください。

フォントファイルの形式によって読み込めない場合があるかもしれません。

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月08日(金) 22:00
by Ryo
そもそもフォントがインストールされてない環境ってことはありませんか?

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月08日(金) 22:09
by h2so5
"Palatino Linotype" はWindows 2000以降に最初から入っているようなので、わざわざ消さない限りはインストールされていると思います。
http://www.microsoft.com/typography/fon ... x?FMID=854

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月08日(金) 23:43
by Ryo
なるほど、勘違い失礼いたしました

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月09日(土) 14:55
by 青虫8826
Ryo さんが書きました:そもそもフォントがインストールされてない環境ってことはありませんか?
 しっかりインストールされているのを確認したので、そのような事は無いと思います。
Ryo さんが書きました:なるほど、勘違い失礼いたしました
 いえ、こちらの方が失礼させて頂いている身です^^;
h2so5 さんが書きました:
青虫8826 さんが書きました: 「Palatino Linotype」というフォントを使いたいのですが、
件名の通り、何故か使用が出来ません。
それ以外にも、全角の含まれていないフォント名のものも使用が出来ませんでした
(全てのフォントを検証をしてないのでそうとは断定出来ませんが...)。
フォント名に全角文字が含まれているフォントは使用できるということですか?
青虫8826 さんが書きました: プログラムの開示は、フォントの呼び出し方をどのようにしても出来ない為無意味だと思うので、
勝手ながらに省略させて頂きました。
どのようにしたのかが重要ですので、コードを貼ってください。
トピックを立てた後に色々試していたら、どうやら半角のみのフォント名が使えないみたいです。
急ぎ過ぎた事を言い、更に勝手な省略と分かり難い説明、更に更に遅い返信になってしまい大変申し訳ないですorz


とりあえず、これまでの経由を説明させて頂きます(その経由の中でも可笑しい所があればご指摘の方お願いします)。

 先ず、サンプルプロブラミングの館に御座います「RPGのサンプル」の方を参考にさせて頂きました。
そのプログラムを見て、一つのヘッダファイル(GV.h)に必要な変数を宣言して、
そこに一つの関数(load.cppのdat_load())から必要なデータを一挙に格納すると言う構造を教わりました。

 そこで、このプログラムに自分の好きなように継ぎ足す形で一つ一つの関数の役割などを把握して行こうと思い作業を始めました。

 ところが、GV.hに新たにフォント用の変数(フォントハンドル)を宣言して、
dat_load()からCreateFontToHandle関数を使って「Palatino Linotype」のフォントデータを格納したのですが、
DrawStringToHandle関数から呼び出してもDrawFormatStringToHandle関数から呼び出してもフォントだけがデフォルトのままでした
(ここでかなり試行錯誤を重ねた為、単に呼び出し側の指定したフォントハンドルが誤っていたと言った凡ミスは無いと思っています)。

 「今のプログラムの構造に問題があるのかも知れない」と思い、新たにプロジェクトを作って下記のようなプログラムにしてみました
(vista標準フォント以外のフォントもありますが、フォントがインストールされているのをしっかり確認しました)。

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){

	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );

	int FH[10] = {
		CreateFontToHandle( NULL, 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "Palatino Linotype", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "Rod", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "Courier", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "Arial", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "魚石行書", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "HG丸ゴシックM-PRO", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "AR勘亭流H", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "DF行書体", 18, 3, DX_FONTTYPE_NORMAL),
		CreateFontToHandle( "MS 明朝", 18, 3, DX_FONTTYPE_NORMAL),
};

	while( ProcessMessage()==0 && ClearDrawScreen()==0 ){
		
		DrawFormatStringToHandle( 20,  50, GetColor(255, 255, 255), FH[0], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20,  70, GetColor(255, 255, 255), FH[1], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20,  90, GetColor(255, 255, 255), FH[2], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20, 110, GetColor(255, 255, 255), FH[3], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20, 130, GetColor(255, 255, 255), FH[4], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20, 150, GetColor(255, 255, 255), FH[5], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20, 170, GetColor(255, 255, 255), FH[6], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20, 190, GetColor(255, 255, 255), FH[7], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20, 210, GetColor(255, 255, 255), FH[8], "あいうえお ABCDE abcde 12345");
		DrawFormatStringToHandle( 20, 230, GetColor(255, 255, 255), FH[9], "あいうえお ABCDE abcde 12345");

		ScreenFlip();
	}
}

 これで実行してみましたが

http://uploda.cc/img/img5115dc44619d2.png ←上記のプログラムを実行した画像です。

このように、私が使いたいと思っている「Palatino Linotype」だけで無く、半角のみのフォント名のもの全てがデフォルトのままでした。

 これは幾らやっても出来そうに無いと思ったので、この掲示板を使わせて頂きました。

h2so5 さんが書きました:フォントファイルの形式によって読み込めない場合があるかもしれません。
 上記のプログラムで使っているフォントはある程度ファイル形式をバラしているので、やはり原因は半角の場合なのでは...


 長文失礼しました。

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月09日(土) 15:34
by h2so5
このコードにある英文フォントはすべてOpenTypeのフォントです。
一方、和文フォントはおそらくすべてTrueTypeです。

DXライブラリがOpenTypeのフォント形式に対応していないだけだと思います。
TrueTypeの "Gulim" や "Meiryo UI", "Ricty", "UmePlus P Gothic" は表示できました。
(後ろ二つは標準で入っていないフォントです)

なぜか Cambria はTrueTypeなのに表示できませんでしたが理由は分かりません。

[追記]
あとで気づきましたが、TrueTypeのフォントで表示できたのってすべてCJK系のフォントですね。
Cambria はASCIIのみのフォントのようなのでそれが関係するかもしれないです。

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月09日(土) 16:34
by 青虫8826
訂正:Courier → Courier New

 天然なあまり、肝心な半角のみのフォント名の所をバラしていませんでしたorz
仰った通り、確かに「Gulim」と「Meiryo UI」がしっかり表示されました!

 しかし、「HG丸ゴシックM-PRO」だけはOpenTypeなのに、何故か表示されていました。

 推測なのですが、OpenTypeの場合は同じフォント名が2つ以上あると、
競合などの問題が発生して表示されなくなると言う事だったりするのでしょうか?

 「MS 明朝」は同じフォント名のものが二つありますが、どちらもTrueTypeなので表示されても可笑しくはありません。
 フォント名が「Cambria」のものは確かにTrueTypeのものもありますが、他にも「Cambria Bold」や「Cambria Italic」などのOpenTypeのものもあった為、表示されないのにも納得が行きます。
 「Palatino Linotype」はOpenType、他の同じフォント名の「Palatino Linotype Italic」、「Palatino Linotype Bold」と言うものもOpenTypeだった為、表示されなかった。
 他にも色々見てみましたが、「Rod」以外はこの推測に当てはまっていました
(「Rod」は一つしかないのに表示されませんでした)。

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月09日(土) 16:40
by 青虫8826
h2so5 さんが書きました: [追記]
あとで気づきましたが、TrueTypeのフォントで表示できたのってすべてCJK系のフォントですね。
Cambria はASCIIのみのフォントのようなのでそれが関係するかもしれないです。
やはりDXライブラリの不具合なのですかね...
どうしても「Palatino Linotype」を使いたいのですが、何か打開策はあったりするのでしょうか?

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月09日(土) 16:59
by h2so5
DXライブラリの不具合については本家の掲示板で聞いたほうが早いと思います。

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月09日(土) 17:16
by 青虫8826
本家の掲示板なんてあったのですか...
早速使わせて頂きます。

Re: 一部のフォントの使用が出来ない

Posted: 2013年2月09日(土) 17:40
by 青虫8826
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=2829
本家の掲示板で検索をしたら同じ症状で悩んでる方を見つけて、あっさり解決しました!
どうやら、DXライブラリの内部の処理が原因だったようで、本家の管理人様が修正版を出していらしたので、
それと元のものを置き換えたら、普通にフォントが表示されるようになりました
(ただ、実行速度が少し遅くなったような気がします...)。

最後に、とても丁寧に答えてくださってとても助かりました、本当に有難う御座いました!