Рисование текста с базовой графикой

Мне нужно нарисовать центрированный текст в CGContext.

Я начал с подхода Какао. Я создал NSCell с текстом и попытался нарисовать его так:

NSGraphicsContext* newCtx = [NSGraphicsContext
     graphicsContextWithGraphicsPort:bitmapContext flipped:true];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:newCtx];
[pCell setFont:font];
[pCell drawWithFrame:rect inView:nil];
[NSGraphicsContext restoreGraphicsState];

Но CGBitmapContext, похоже, не отображает текст. Возможно, потому что мне нужно передать nil для параметра inView :.

Итак, я попытался переключить рендеринг текста на Core Graphics:

Самый простой способ - использовать CGContextSelectFont для выбора шрифта, используя его имя postscript и размер точки. , но CGContextShowTextAtPoint принимает только символы, отличные от Unicode, и нет очевидного способа уместить текст в прямоугольник: или вычислить размеры строки текста, чтобы вручную разложить прямоугольник.

Затем есть CGFont, который можно создать, и установить cia CGContextSetFont. Для рисования этого текста требуется CGContextShowGlyphsAtPoint, но опять же в CGContext не хватает функций для вычисления ограничивающего прямоугольника сгенерированного текста или для переноса текста в прямоугольник. Кроме того, не очевидно, как преобразовать строку в массив CGGlyph.

Следующий вариант - попытаться использовать CoreText для визуализации строки. Но классы Core Text чрезвычайно сложны, и хотя есть примеры, которые показывают, как отображать текст заданным шрифтом в прямоугольнике, нет примеров, демонстрирующих, как вычислить ограничивающий прямоугольник строки CoreText.

Итак. :

  • Учитывая CGFont и CGContext, как мне вычислить ограничивающий прямоугольник некоторого текста и как преобразовать текстовую строку в массив CGGlyphs?
  • Учитывая строку, CGContext и имя постскрипта и размер точки, какие объекты Core Text мне нужно создать, чтобы вычислить ограничивающий прямоугольник строки и / или нарисовать строку, обернутую в прямоугольник в CGContext.
  • Учитывая строку и NSFont - как мне отобразить строку на CGBitmapContext? Я уже знаю, как получить его экстенты.
8
задан Chris Becke 8 December 2010 в 10:19
поделиться