ひとつ前の記事
ココア図書館 #01 - 縁取り付きの文字列を描画する - 3/22 01:14
ひとつ先の記事
1年越しの夢かなう〜ステレオハック開始 - 3/31 01:18
3月25日(木)
ココア図書館 #02 - 縁取り付きの文字列を描画する その2
CV:斎藤千和で人里離れた山の奥にある小さなサイト。そこにはゆかり姫ラブな管理人と、女医ハック狂いの管理人と、Cocoa の勉強を始めた管理人がいるのです(←どうやらこの口上が毎回言いたいらしい)。
ちゅうか、びっくりしたー前回のココア図書館の記事に mkino@HAPPY Macintosh Developing TIME!さんがうちの掲示板で反応してくれてました。うれすぃ…。
mkinoさんといえば、Cocoa の世界では大御所じゃないですか。そんな人がこんな人里離れた山の奥にある小さな図書館(やっぱりこれが言いたいらしい)に足を運んでくれるとは!すげいでよ!あひーっ!
はい、それで、本題なんですけど、
NSAttributedStringに、NSStrokeWidthAttributeNameとNSStrokeColorAttributeName を設定してdrawAtPoint:するのも、簡単でいいと思うんですが、どうでしょう?
NSAttributedStringだと、storkeWidthを使うと中身が塗りつぶされないですよね。だから、始めに通常の文字を描いて、重ね書きをするといいと思います。
とのことでした。
そうなんです。楽な方がいいに決まってます。
/* NSStrokeWidthAttributeName は縁取りの幅を指定 */
[fontBorderAttr setObject:[[NSNumber alloc]initWithFloat:10.0]
forKey:NSStrokeWidthAttributeName];
/* NSStrokeColorAttributeName は縁取りの色を指定 */
[fontBorderAttr setObject:[NSColor whiteColor] forKey: NSStrokeColorAttributeName];
[writeStr drawAtPoint:NSMakePoint(x,y) withAttributes:fontBorderAttr];
[writeStr drawAtPoint:NSMakePoint(x,y) withAttributes:fontAttribute];
としてあげますと、ちゃんと縁取りで書いてくれますよ。簡単だし、こっちを多用するのがいいと思います。実はこの方法も HackENT の初期段階では使っていました。
だけどカラオケという意味だとこれで書いた文字列がいまいちだったので、前回のまわりくどい方法にたどり着いたんですよ。前回(右側)のと比較してみるとよくわかります。
もう『レモネード』最高なわけですが、縦に並べてみるとこんな感じ。
普通の縁取り効果がほしかったら前者のほうがかっこいいのですが、ことカラオケとなるとやはりボーダーの存在意義が変わってきますよね。
まず角を丸くしたいときは、NSStrokeWidthAttributeName じゃできないんじゃないかと思って早々にあきらめちゃって、最終的に NSGlyph にたどり着いたのですよ。
ちなみに、REALbasic 時代はどうやっていたかといいますと、いわゆる東西南北法(←いま命名)を使ってました。
要は、文字列を書く前に、縁取りしたい色で文字列の東、西、南、北、北東、北西、南東、南西にずらして文字を書いておいて、最後にその上から中身の色で文字列を書いてました。だから1行書くのに都合9回も描画処理するんです。
そうやって描いた文字列はこんな感じです。Cocoa 化した直後、HackENT の初期もこの方法で書いていましたよ。
ね、これも案外わるくないでしょ。ただ、大量に処理すると時間がかかっちゃうのですよね。しっかし、能登麻美子はいいよねぇ。
ただ、カラオケを気持ちよく歌うためには、文字の見やすさがどうしても必要で、背景の動画やスクリーンセイバーに負けない、しっかりした縁取りが重要ってことで、やっぱ時間がかかっても、苦労してでも、きれいな縁取りを描画していきたい、と思うのでした。
はい、それでは、脳内能登麻美子とバーンナップしてくるので、この辺で失礼します。また次回。
2004/3/25 01:16