文字列に任意の角度で斜体をかける[VCL]

C++Builderで、文字に任意の角度で斜体をかけて描画する方法。
基本的に文字も点の集まりなので、その点の位置をずらして変形する。
具体的には、
 ①文字をパスでImage等のCanvasに描く
 ②パスから点の集合を取得する
 ③点の位置をずらした新たな点集合を作成
 ④変形用の点集合でCanvasに描く
という手順になる。

Vclにはパスを扱うクラスはないので、WindowsAPIを直接使うことになる。
以下、サンプル。FormにTrackBarとImageを置いた例。
(boost::shared_arrayを使っているが、生ポインタをnewしてももちろん動く)

こんな感じで変形する。

点の情報をずらすだけなので、さまざまな形に変形可能。
たとえば文字列に楕円が食い込んだように変形させる関数のサンプル。

こんな感じで変形する。

C++Builder Berlin Update2 / Windows7(Sp1)で確認。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です