ページ 11

フリーフォントについて

Posted: 2009年4月11日(土) 01:40
by kazuoni
お邪魔します。

ゲームのロゴで以下のサイトにあるロゴを使いたいと考えているのですが、
.TTFを提供された側がそのフォントをインストールせずに、表示することは可能なのでしょうか?
例えば.TTFを同封して、その指定した文字をプログラムが読み込む
ッという感じなのですが・・・。
何か解決策はあるのでしょうか?

もしなければ、一文字ずつ画像として読み込み、
プログラムで自作関数を利用して文字描写をしようと思っていますが、
もし前者ができるならそれが一番いいなと思ったので、質問させていただきました。

あと、同封されていたReadMeには使用にあたっての規約がなく、
制作者のサイトも存在しませんでした。
これは最後の行にある
Copyright 1997 TiD
のみを自分は記述すればよいのでしょうか?

ttp://www.dafont.com/cube-toss.font

よろしくお願いします。

Re:フリーフォントについて

Posted: 2009年4月11日(土) 06:06
by SooA
AddFontResourceExに関して
http://msdn.microsoft.com/ja-jp/library/cc428288.aspx

■サンプル

	AddFontResourceEx( [color=#bbffbb>フォントファイル名[/color], FR_PRIVATE, NULL );

	int hf = CreateFontToHandle( [color=#bbffbb>フォント名[/color], 48, 1, DX_FONTTYPE_NORMAL ) ;
	DrawStringToHandle( 8 , 64, "あいうえお" , 0xffffff, hf ) ;

	ScreenFlip() ;

	// ソフトウェア終了時
	RemoveFontResourceEx( [color=#bbffbb>フォントファイル名[/color], FR_PRIVATE, NULL ) ;
>ttp://www.dafont.com/cube-toss.font
Download のところに Free となっているので、
著作権表示を行っておけば大丈夫だと思いますが、
DXライブラリからでは正常に表示させることができませんでした、
動作に関しては他の日本語フォントで試してみてください。

Re:フリーフォントについて

Posted: 2009年4月11日(土) 12:07
by Justy

>同封されていたReadMeには使用にあたっての規約がなく

 これは曲者ですね。
 サイトにフリーと書いてあっても、

・ 個人的にフォントをインストールしてそのまま使用する
・ 商用目的でフォントをインストールしてそのまま使用する
・ フォントデータを絵として取り出し、加工して使用する
・ フォントデータを改造し使用する
・ フォントを再配布する
・ フォントを改造して再配布する

など、どこまでの範囲がフリーなのかわからないですからねぇ。



>一文字ずつ画像として読み込み、
>プログラムで自作関数を利用して文字描写をしようと思っていますが、
>もし前者ができるならそれが一番いい

 後者のような使い方、あるいは前者で不特定多数の配布を前提としない
個人使用の範囲であれば別段問題はないと思いますが、
そうでなければ作者を捕まえて訊いてみるのが一番だと思います。

(作者の名前で検索をかけたら、今でも使えるかどうかわからないですが
メールアドレスが出てきました)

 あと、参考までに。

Design Source - デザインソース -: 巨大フォントライブラリー『dafont.com』
ttp://design-source.seesaa.net/article/36178884.html


#ほんとかどうか、今もそうなのかはわかりませんが、
ttp://www.ne.jp/asahi/kyakirun/kya/MAKUTSU/BakaFonts/nikki/2002/nikkiMar.HTM
この 2002年3月22日の記事が本当なら、本人の預かり知らないところで勝手に載せられて
しまうこともあるようです……。



□ SooAさん
>DXライブラリからでは正常に表示させることができませんでした

 キャラクタセット(多分 DX_CHARSET_DEFAULT)を設定すれば、表示できるかもしれません。

Re:フリーフォントについて

Posted: 2009年4月11日(土) 12:09
by toyo
出来ました
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE);
	if (DxLib_Init() == -1) return 1;
	SetDrawScreen(DX_SCREEN_BACK);
	AddFontResource(TEXT("CT.TTF"));
	// 日本語を含まないフォントの場合はDX_CHARSET_DEFAULTを指定しないとだめ
	int hf = CreateFontToHandle("Cube Toss", 48, 1, DX_FONTTYPE_NORMAL, DX_CHARSET_DEFAULT);
	if (hf < 0)
	{
		RemoveFontResource(TEXT("CT.TTF"));
		DxLib_End();
		return 1;
	}
	DrawStringToHandle(8 , 64, "ABC" , 0xffffff, hf);
	// ChangeFontでもできます
	ChangeFont( "Cube Toss", DX_CHARSET_DEFAULT );
	SetFontSize(60);
	DrawString(8, 128, "XYZ", 0xff0000);
	ScreenFlip();
	WaitKey();
	DeleteFontToHandle(hf);
	RemoveFontResource(TEXT("CT.TTF"));
	DxLib_End();
	return 0;
}

Re:フリーフォントについて

Posted: 2009年4月11日(土) 13:03
by kazuoni
こんな関数があるんですね^^;
Windows GDI(?)っていうものを初めて知りました。。
いろいろ関数見てみると何やらいろいろありますね^^;

みごとにtoyoさんのコードでいけました!

が、著作権は厄介ですね。。
一応本人にメールを送ってみますが、
そこまでしないでもって気もしてきました。。
英語が通じるかどうか。。

今回はこれで解決とさせていただきます。
ご回答してくださった皆様、本当にありがとうございました。

またよろしくお願いします。

Re:フリーフォントについて

Posted: 2009年4月11日(土) 15:22
by SooA
Justyさん
> キャラクタセット
補足というか解決策ありがとうございます。


> kazuoniさん
toyoさんのサンプルでは AddFontResource を使っていますが、
AddFontResource ではプログラム実行中に他のプロセス、
例えばワード等でもそのフォントが利用可能な状態になります。
プログラムが終了すると使えなくなるフォントに
アクセスできるのはあまり望ましくないと思うので
AddFontResourceEx を使用したほうが良いかと思います。


著作権に関して私の文章は安易に考えていたようです。
フリーフォント関連のサイトを巡ってみましたが、
結構シビアなとこが多いですね^^;

使用フォントが単純な部類なのでDXライブラリでライン描画させるとか、
フォントを自作するというのもありかもしれません。

Re:フリーフォントについて

Posted: 2009年4月11日(土) 15:49
by kazuoni
>AddFontResourceEx を使用したほうが良いかと思います
了解しました^^ご丁寧にありがとうございます!

テトリスには持ってこいのフォントに見えたのですが、
作者がどこにもいませんww
メールも届かないっということで、今回は見送りました^^;

Re:フリーフォントについて

Posted: 2009年4月11日(土) 17:10
by SooA
似たような?フォントを表示するサンプルです。

	char fontmap[8][8] = {
		0,0,0,0,0,0,0,0,
		0,0,0,1,0,0,0,0,
		0,0,1,0,1,0,0,0,
		0,1,0,0,0,1,0,0,
		0,1,0,0,0,1,0,0,
		0,1,1,1,1,1,0,0,
		0,1,0,0,0,1,0,0,
		0,1,0,0,0,1,0,0,
	} ;

	int x, y, sx, sy, ex, ey ;

	// 表示位置とサイズと色
	int hx=64, hy=64, hs=32, hc=0xbbffbb ;

	for( sy=0; sy<8; sy++  )
		for( sx=0; sx<8; sx++  )
			if( fontmap[sy][sx] != 0 )
			{
				x = hx+sx*hs ;
				y = hy+sy*hs ;
				DrawBox( x, y, x+hs+1, y+hs+1, hc, FALSE ) ;
				ex = x+hs/2 ;
				ey = y-hs/2 ;
				DrawBox( ex, ey, ex+hs+1, ey+hs+1, hc, FALSE ) ;
				DrawLine( x, y, ex, ey, hc ) ;
				DrawLine( x+hs, y+hs, ex+hs, ey+hs, hc ) ;
				DrawLine( x, y+hs, ex, ey+hs, hc ) ;
				DrawLine( x+hs, y, ex+hs, ey, hc ) ;
			}
一文字だけ表示させていますが、
画像等からフォントデータを作ったり
関数化して文字列を表示できるように変更すれば良いかと。

Re:フリーフォントについて

Posted: 2009年4月11日(土) 20:57
by kazuoni
あらー。こんな風に実装していただいたのですか^^;

せっかくなので、これを関数化してタイトル画面等に
利用させてもらってもよろしいでしょうか?

Re:フリーフォントについて

Posted: 2009年4月11日(土) 21:18
by SooA
使用に関してはやっつけサンプルですのでご自由にどうぞ。

背景処理を行っていませんので用途によっては実装する必要があるかも。
(そのまま線を描きこんでいるだけなので><;)