PixelText variation (5)
2007/10/01 21:00 - tweener
PixelText バリエーションの微妙な差異を生み出す3変数の詳しい説明を続けます。
- Main.as のクラスプロパティ scale:uint
- Pixelize.as の createPositions メソッド内、new AqLetter() の第2引数であるオブジェクト { font:String , size:uint }
今回は 2. のオブジェクト変数を構成する2つの変数、font と size について。
font と size がペアになったオブジェクト変数は、Pixelize.cratePositions において、AqLetter オブジェクトを作成する際の引数として使用します。
// ピクセル化する文字列 var aqLetter:AqLetter = new AqLetter( null , { font:"_serif",size:30 } ); aqLetter.text = dispStr;
AqLetter とは何か、というのは AqLetter についてのエントリーをご覧いただくとして、要点だけ述べると、ここで問題になっている font や size というのは TextFormat のプロパティである font や size である、ということです。
で、以下各変数について。
font
これについては特に説明する必要もないでしょう。そのものズバリ、ピクセル化する文字のフォントタイプを指定します。
size
これまた説明するまでもなく、ピクセル化する文字のフォントサイズです。
ではなぜ、この値を変えることが文字をピクセル化する際の精細度の変化に結びつくのか。
ここで再び Pixelize.createPositions でテキストを走査するコードを見てください。
for ( var cntx:int=0; cntx<w; cntx++ ) { for ( var cnty:int=0; cnty<h; cnty++ ) { // ピクセル ARGB 取得 argb = bmd.getPixel32( cntx , cnty ); // 各セルの座標計算 if ( ((argb>>24)&0xFF) != 0 ) { posx = ( cntx + 0.5 ) * scale + offsetx; posy = ( cnty + 0.5 ) * scale + offsety; pos_array.push( { posx:posx , posy:posy } ); } } }
1行目と2行目の for 文に注目。
1行目が横方向への走査、2行目が縦方向への走査です。
各 for 文の第3項を見てください。共にただのインクリメント(++)です。 つまり文字列走査は1ピクセルずつおこなっているということです。
文字列のサイズを大きくすれば、その文字を成す線や点を構成するピクセルが増えますね。 ってことは1ピクセルずつ走査しているんだから、size を大きくすれば文字列の精細度が上がるのは理の当然というわけです。
以上、前回と今回の2回に渡っておこなった、3つの変数の詳しい説明を踏まえたうえで、このシリーズ第3回目でも示した以下のテーブルを再び見てください。
なるほど、と納得していただけようと思います。
scale | font | size | |
---|---|---|---|
最初のサンプル | 16 | "_sans" | 16 |
2番目のサンプル | 12 | "_serif" | 20 |
3番目のサンプル | 8 | "_serif" | 30 |
最後のサンプル | 4 | "_typewriter" | 60 |