FreeTypeを使う 新しいページはコチラ
提供: yonewiki
(→概要) |
|||
67行: | 67行: | ||
− | + | 実際にデバッグでもなんでもテストでアプリを動かす時は、ダイナミックリンクライブラリを使うので、dllをがうごかせるように実行ファイルと同じディレクトリ置くとか、環境変数のPathの参照可能な範囲に配置する指定をしないと駄目です。プロジェクトごとにどの環境で動かすのかを見極めて環境変数の設定しないとだめです。プログラマなら実行ファイルが完成するまではDebug版のダイナミックリンクライブラリを使うはずなので、環境変数Pathにfreetype.libのx64 <span>(</span>Win32をQtアプリの人はWin32<span>)</span> ぷr | |
+ | purakdaprafkdafjafjd;ajfkdlajfdkladfjadkfjdlfjdklfjlajff''' == | ||
+ | この記事はFreeTypeを使うであって、FreeTypeをまとめる記事ではないです。なので遊び場程度の記事になります。遊べるかは謎です。Font情報をどれくらい操作できるのか試してみるところです。目標はPDFを作るためのグリフ番号取得と、フォントプログラムの再構成。サブセットフォントを作るということです。 | ||
+ | |||
+ | |||
+ | そこまですることなんか?とは思っています。フォントの構造を知ることに重きを置きながらがんばります。 | ||
+ | |||
+ | |||
+ | まずはコンソールプログラムでチュートリアルっぽいことを。 | ||
+ | |||
+ | |||
+ | ってチュートリアルのとおり、作り始めたらQt64bitコンソールアプリケーションを作ってるせいで、64bitのライブラリが必要になってしまった。開発時にダイナミックリンクを使うと勉強の質が低下してしまうので、64bit32bit混在で動かすわけにもいかず、似非64bitのfreetypeライブラリを作成するために、libpngで似非64bitプラットフォームを作成した。似非というのは、何もプログラムを変更しないで、ただ64bit宣言するだけのことです。bit演算が凄まじいアプリケーション群なので、これが原因でアドレスの使い方が変わってバグる可能性はあるが、莫大なコードを目の前に、全てを潰していくのはサハラ砂漠にダイアモンドを埋めたのを探すようなモノ。無謀な道とは知りつつ、しばらく、これで突き進む。 | ||
+ | |||
+ | |||
+ | ちな | ||
+ | |||
+ | |||
+ | 似非を作るには[[VC PlusPlus:似非64bitプラットフォームの追加|コチラ]]の手順として記載。 | ||
+ | |||
+ | |||
+ | Qtコンソールプログラムの書き始めは以下のような状態。Qtについては、Qt導入の記事をみて下さい。なんでQtなん?って思う人いるとおもいますけど、さほどQtの要素は使わないので、安心して下さい。Qtやってるっていう見せかけですよ。 | ||
+ | <Syntaxhighlight2 lang="cpp"> | ||
+ | #include <QtCore/QCoreApplication> | ||
+ | |||
+ | int main(int argc, char *argv[]) | ||
+ | { | ||
+ | QCoreApplication a(argc, argv); | ||
+ | |||
+ | |||
+ | |||
+ | return a.exec(); | ||
+ | } | ||
+ | |||
+ | </Syntaxhighlight2> | ||
+ | |||
+ | 自分は64bit版ですが、64bit版を生成するのが面倒な人はQtの32bit版のLibraryを導入して新規作成するとよいね。Qtの64bit版を使ってるつもりで説明します。ところどころ32bit版の人向けのコメントも添えます。 | ||
+ | |||
+ | |||
+ | まずはプロジェクトの設定を変えて、freetypeが使える状態にします。 | ||
+ | |||
+ | |||
+ | インクルードファイルのありかを設定します。ライブラリを使うときはまずはヘッダファイルで関数の全ての情報が必要です。標準関数でさえ#include <stdio.h>って設定するもんね。同じこと。 | ||
+ | |||
+ | |||
+ | ソリューション構成をDebug、ソリューションプラットフォームをx64<span>(</span>32bitに人はWin32<span>)</span>に設定します。ツールバーのリストを選ぶところですね。次に、メニューの[プロジェクト]-[プロパティ]を選択します。 | ||
+ | |||
+ | |||
+ | [VC++ディレクトリ]の項目の中の[外部インクルードディレクトリ]に以下を追加します。 | ||
+ | |||
+ | |||
+ | C:\…\…\…\…\freetype-2.9.1\include | ||
+ | |||
+ | |||
+ | |||
+ | [VC++ディレクトリ]の項目の中の[ライブラリディレクトリ]に以下を追加します。 | ||
+ | |||
+ | |||
+ | C:\…\…\…\…\freetype-2.9.1\objs\x64\Debug | ||
+ | |||
+ | |||
+ | 絶対パスなので、…の部分はそれぞれの、freetypeの配置した場所に、freetype-2.9.1となっているところもそれぞれのバージョン番号だったり、名前を変えてfreetypeにしたりしてる場合も合わせて下さい。64bitの場合はx64ですが、32bitのQtアプリの場合はx64ではなくWin32です。 | ||
+ | |||
+ | |||
+ | 構成のRelease版も合わせて変更しておくとよいでしょう。インクルードディレクトリは同じで、ライブラリディレクトリはDebugがReleaseに代わります。 | ||
+ | |||
+ | |||
+ | 実際にデバッグでもなんでもテストでアプリを動かす時は、ダイナミックリンクライブラリを使うので、dllをがうごかせるように実行ファイルと同じディレクトリ置くとか、環境変数のPathの参照可能な範囲に配置する指定をしないと駄目です。プロジェクトごとにどの環境で動かすのかを見極めて環境変数の設定しないとだめです。プログラマなら実行ファイルが完成するまではDebug版のダイナミックリンクライブラリを使うはずなので、環境変数Pathにfreetype.libのx64 <span>(</span>Win32をQtアプリの人はWin32<span>)</span> のDebug版にPathを設定しましょう。 | ||
+ | |||
+ | |||
+ | コンパネのシステムの右側の詳細設定から詳細。環境変数の中のPathに | ||
+ | |||
+ | |||
+ | C:¥…\…\…\…\…\freetype-2.9.1\objs\x64\Debug | ||
+ | |||
+ | |||
+ | を追加しましょう。コマンドプロンプトでwhere %path% freetype.dll とすると、フルパスが帰ってきたら、パスが通っていて、freetype.dllがどの実行ファイルからも参照できるようになっていることを意味します。フルパスが表示されず。また次のプロンプトだけが表示された場合は失敗しています。もう一度確認しましょう。デバッグ押しても、もちろんアプリを起動できません。 | ||
+ | |||
+ | |||
+ | そうすると、うまく設定できたかを確かめるために、少しだけプログラムを記述してビルドして確かめてみます。 | ||
<Syntaxhighlight2 lang="cpp" line=1> | <Syntaxhighlight2 lang="cpp" line=1> | ||
102行: | 180行: | ||
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ========== | ========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ========== | ||
</Syntaxhighlight2> | </Syntaxhighlight2> | ||
+ | |||
+ | |||
+ | |||
+ | ここまできたらFreetypeを使える状態になったと言えます。いよいよ使っていきましょう。ところでfreetypeって、どういうことができるのか、 | ||
+ | |||
+ | |||
+ | ひとことで言えば、フォントから文字を描画するのに必要な情報を取り出す作業ができる。どんな情報?っていうのが詳しい説明になるわけですが、 | ||
+ | |||
+ | |||
+ | *フォントデータからプログラマが指定したフォントサイズ<span>(</span>ポイント<span>)</span>をもとに、指定したグリフ番号のビットマップモノトーン値をピクセル毎に取得できます。 | ||
+ | :なかなかえぐい計算量ですが、まぁ最近のPCの早いこと。しゅっとフォントがビットマップになります。 | ||
+ | |||
+ | *前項のような作業のために文字コード番号から標準のグリフを取得したり、文字コード+付帯情報でその関連グリフの番号を取得できる。 | ||
+ | :つまり、PDFでやりたかった文字コードからグリフ番号を取得する作業ができるということです。このライブラリを使えば目的は一つ達成できる。 | ||
+ | |||
+ | |||
+ | これが最初のチュートリアルで紹介するサンプルの機能です。公式サイトにはQtでのサンプルもありますので、管理人と同じくQtで頑張っている人と共に勉強していけるはずです。 | ||
+ | |||