Ian*_*ell 7 iphone opengl-es core-graphics objective-c
我正在尝试从文本生成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;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有CGColorSpaceCreateDeviceRGBA,CGColorSpaceCreateDeviceRGB导致以下错误:
CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 448 bytes/row.
Run Code Online (Sandbox Code Playgroud)
我缺少什么来创建OpenGL想要的正确RGBA8格式?
更新:我更改了CGBitmapContextCreatefrom 的最后一个参数kCGImageAlphaNone(当我复制粘贴代码时)kCGImageAlphaLast,这是我错误尝试的几种变体之一.
更新2:UIGraphicsGetImageFromCurrentImageContext()如果未创建上下文,则返回nil UIGraphicsBeginImageContext(),因此有必要以不同方式提取图像:[UIImage imageWithCGImage:CGBitmapContextCreateImage(contextRef)].
NSG*_*God 14
您在创建过程中指定的颜色空间不会导致类似的错误.
你得到这个错误的原因是你为每个组件指定了8位,可能是4*size.width你传入的值中有4个颜色分量bytesPerRow,但bitmapInfo参数是kCGImageAlphaNone.kCGImageAlphaNone只是意味着RGB,不是RGBA.如果您愿意RGBA,您应该最有可能指定.kCGImageAlphaLastkCGImageAlphaPremultipliedLast
[编辑]抱歉.我应该说kCGImageAlphaPremultipliedLast,不是kCGImageAlphaLast.
所以,像这样:
CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGContextRef contextRef = CGBitmapContextCreate(NULL,
size.width,
size.height,
8,
4 * size.width,
colorSpace,
kCGImageAlphaPremultipliedLast);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15030 次 |
| 最近记录: |