Как сгенерировать RGBA изображение в Core Graphics?

Я пытаюсь сгенерировать изображение RGBA8 из текста для использования в качестве текстуры OpenGL ES 2.0.

+(UIImage *)imageFromText:(NSString *)text
{
  UIFont *font = [UIFont systemFontOfSize:20.0];  
  CGSize size  = [text sizeWithFont:font];

  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  CGContextRef contextRef =  CGBitmapContextCreate (NULL,
                                                    size.width, size.height,
                                                    8, 4*size.width,
                                                    colorSpace,
                                                    kCGImageAlphaLast
                                                    );
  CGColorSpaceRelease(colorSpace);
  UIGraphicsPushContext(contextRef);

  [text drawAtPoint:CGPointMake(0.0, 0.0) withFont:font];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsPopContext();

  return image;
}

К сожалению, нет CGColorSpaceCreateDeviceRGBA, и CGColorSpaceCreateDeviceRGB приводит к следующей ошибке:

CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 448 bytes/row.

Чего мне не хватает, чтобы создать правильный RGBA8 формат, который OpenGL хочет здесь?

Обновление: Я изменил последний параметр CGBitmapContextCreate с kCGImageAlphaNone (который был, когда я копировал вставленный код) на kCGImageAlphaLast, что является одной из нескольких вариаций, которые я попробовал с ошибкой.

Обновление 2: UIGraphicsGetImageFromCurrentImageContext() возвращает ноль, если контекст не был создан с помощью UIGraphicsBeginImageContext(), поэтому необходимо извлечь изображение по-другому: [UIImage imageWithCGImage:CGBitmapContextCreateImage(contextRef)].

7
задан genpfault 8 October 2013 в 14:23
поделиться