Хит-тестирование текста в Какао (Mac)? - PullRequest
2 голосов
/ 13 августа 2011

Есть ли способ проверки текста? Например, если я нарисую на экране текст «Привет, граф!» Внутри ограничительной рамки, как я могу указать размер и положение этих пустых прямоугольников (пробелов):

  • Пустой прямоугольник над буквой "е"
  • Пустой прямоугольник, который простирается от буквы "o" до буквы "p"
  • Пустой прямоугольник под буквой "H" до пробела перед "g"

и т. Д., Вы поняли.

Другими словами, как узнать, какие области заняты реальным текстом и какие области действительно пустыми.

Платформа (графическая библиотека) - Какао в Mac OS X, набор символов - Юникод (который, вероятно, исключает необработанный API CoreGraphics?), И шрифт может быть любым, что может использовать Какао.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Вы можете нарисовать текст поверх полностью прозрачного растрового изображения (через CGBitmapContext), а затем проверить это растровое изображение, если конкретная точка прозрачна или нет.

Если вам нужен список прямоугольников (который называется регион в 2-мерной графике), вам придется реализовать это самостоятельно или использовать библиотеку Google, поскольку у CoreGraphics и Cocoa нет областей (по крайней мере, задокументировано).

1 голос
/ 15 августа 2011

Вы можете получить прямоугольник символа в 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];

Затем вы можете сравнить эти два прямоугольника.

Естьпосмотрите справочник классов NSLayoutManager , обзор текстовой системы и руководство по программированию текстового макета .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...