Качество изображения графического ядра сетчатки

17

Попытка понять, почему я получаю низкокачественный рисунок с помощью CGContextShowTextAtPoint? См. Прикрепленное изображение:

Буква «W» рисуется с использованием CGContextShowTextAtPoint на CALayer и выглядит очень пикселизированной. Кнопка рядом с ней - стандартная кнопка и выглядит так, как ожидалось. Я хотел бы, чтобы текст был hi-res.

    
задан vance 24.03.2011 в 05:05
источник

4 ответа

36

По умолчанию ваш CALayer не передает свой контент Quartz при более высоком разрешении экрана Retina. Вы можете включить это, используя следующий код:

if ([layer respondsToSelector:@selector(setContentsScale:)])
{
    layer.contentsScale = [[UIScreen mainScreen] scale];
}

Это повлияет не только на рендеринг текста, но и на весь ваш чертеж Quartz в CALayers, поэтому вам нужно будет сделать это для всех ваших слоев с пользовательским содержимым Quartz.

    
ответ дан Brad Larson 24.03.2011 в 17:08
источник
5

Использует ли CGContextScaleCTM любые результаты для вас ? При работе с графическим контекстом, примерно так:

CGFloat scale = [[UIScreen mainScreen] scale];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM(context, scale, scale);
    
ответ дан Matt Bishop 24.03.2011 в 05:18
источник
1

Группа функций управляет тем, как Core Graphics выделяет шрифты:

  • CGContextSetAllowsAntialiasing
  • CGContextSetAllowsFontSmoothing
  • CGContextSetAllowsFontSubpixelPositioning
  • CGContextSetAllowsFontSubpixelQuantization
ответ дан Steve 21.10.2011 в 09:06
источник
0

Быстрая версия:

textLayer.contentsScale = UIScreen.mainScreen().scale

    

ответ дан Suragch 01.01.2016 в 16:04
источник