gpt4 book ai didi

iphone - 如何在 Core Graphics 中生成 RGBA 图像?

转载 作者:太空狗 更新时间:2023-10-30 03:35:43 24 4
gpt4 key购买 nike

我正在尝试从文本生成 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;
}

不幸的是,没有 CGColorSpaceCreateDeviceRGBACGColorSpaceCreateDeviceRGB 导致以下错误:

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)]

最佳答案

您在创建过程中指定的颜色空间不会导致这样的错误。

您收到该错误的原因是您指定了每个组件 8 位,大概是您为 bytesPerRow< 传入的 4*size.width 值中的 4 个颜色组件,还有 kCGImageAlphaNonebitmapInfo 参数。 kCGImageAlphaNone 仅表示 RGB,而不是 RGBA。如果您想要 RGBA,您很可能应该指定 kCGImageAlphaLast kCGImageAlphaPremultipliedLast

[编辑] 抱歉。我应该说 kCGImageAlphaPremultipliedLast,而不是 kCGImageAlphaLast

所以,像这样:

CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGContextRef contextRef = CGBitmapContextCreate(NULL,
size.width,
size.height,
8,
4 * size.width,
colorSpace,
kCGImageAlphaPremultipliedLast);

关于iphone - 如何在 Core Graphics 中生成 RGBA 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com