2

テキストをヒットテストする方法はありますか?たとえば、画面のバウンディングボックス内に「Hellograph!」というテキストを描画した場合、これらの空白の長方形(空白スペース)の寸法と位置をどのように判断できますか。

  • 文字「e」の上にある空白の長方形
  • 文字「o」の上から文字「p」の上まで広がる空白の長方形
  • 文字「H」の下から「g」の前のスペースまでの空白の長方形

など、あなたはアイデアを得る。

言い換えれば、実際のテキストが占める領域と実際に空白の領域を見つける方法です。

プラットフォーム(グラフィックライブラリ)はMac OS XのCocoaであり、文字セットはUnicode(おそらく、生のCoreGraphics APIを除外しますか?)であり、フォントはCocoaが使用できるものであれば何でもかまいません。

前もって感謝します

4

2 に答える 2

1

NSTextView次のように文字の四角形を取得できます。

//Get the range of characters, which may be different than the range of glyphs
NSRange range = [[textView layoutManager]glyphRangeForCharacterRange:NSMakeRange(charIndex, 0) actualCharacterRange:NULL]

//Get the rect of the character
NSRect rect = [[textView layoutManager]boundingRectForGlyphRange:range inTextContainer:[textView textContainer]];

次に、必要なものを取得NSGlyphします。

NSGlyph glyph = [[textView layoutManager]glyphAtIndex:range.location];

そして、それを次のように描画しますNSBezierPath:

NSBezierPath *path = [NSBezierPath bezierPath];
[path appendBezierPathWithGlyph:glyph inFont:myFavoriteFont];

次に、その境界のパスをクエリします。

NSRect actualRect = [path bounds];

その後、これら 2 つの長方形を比較できます。

NSLayoutManager Class ReferenceText System Overview、およびText Layout Programming Guideを参照してください。

于 2011-08-15T06:28:09.630 に答える
1

( 経由でCGBitmapContext) 完全に透明なビットマップ上にテキストを描画し、特定のポイントが透明かどうかをそのビットマップで確認できます。

CoreGraphics と Cocoa には領域がない (少なくとも文書化されている) ため、四角形のリスト (2D グラフィックスでは領域と呼ばれます) が必要な場合は、それを自分で実装するか、ライブラリを検索する必要があります。

于 2011-08-15T06:52:36.130 に答える