Я пытаюсь сгенерировать изображение 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)]
.