【发布时间】:2011-07-28 15:52:18
【问题描述】:
我正在尝试从文本生成 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.
在此处创建 OpenGL 想要的正确 RGBA8 格式我缺少什么?
更新:我将CGBitmapContextCreate 的最后一个参数从kCGImageAlphaNone(我复制粘贴代码时的那个)更改为kCGImageAlphaLast,这是我做过的几个变体之一试错了。
更新 2:如果上下文不是使用 UIGraphicsBeginImageContext() 创建的,UIGraphicsGetImageFromCurrentImageContext() 返回 nil,因此需要以不同的方式提取图像:[UIImage imageWithCGImage:CGBitmapContextCreateImage(contextRef)]。
【问题讨论】:
标签: iphone objective-c opengl-es core-graphics