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

2023-11-21

我正在尝试从文本生成 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, and CGColorSpaceCreateDeviceRGB结果出现以下错误:

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

为了创建 OpenGL 想要的正确 RGBA8 格式,我缺少什么?

Update: 我改变了最后一个参数CGBitmapContextCreate from kCGImageAlphaNone(这是我复制粘贴代码时的情况)到kCGImageAlphaLast,这是我错误尝试过的几种变体之一。

Update 2: UIGraphicsGetImageFromCurrentImageContext()如果上下文不是用以下命令创建的,则返回 nilUIGraphicsBeginImageContext(),因此需要以不同的方式提取图像:[UIImage imageWithCGImage:CGBitmapContextCreateImage(contextRef)].


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

The reason you're getting that error is that you've specified 8 bits per component, presumably 4 color components in the 4*size.width value you passed in for bytesPerRow, yet a bitmapInfo parameter of kCGImageAlphaNone. kCGImageAlphaNone means only RGB, not RGBA. If you want RGBA, you should most likely specify kCGImageAlphaLast kCGImageAlphaPremultipliedLast.

[编辑] 抱歉。我应该说kCGImageAlphaPremultipliedLast, not kCGImageAlphaLast.

所以,像这样:

CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGContextRef contextRef =  CGBitmapContextCreate(NULL,
                                                 size.width,
                                                 size.height,
                                                 8,
                                                 4 * size.width,
                                                 colorSpace,
                                                 kCGImageAlphaPremultipliedLast);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Core Graphics 中生成 RGBA 图像? 的相关文章

  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • 是否可以通过 UIActivityViewController 共享图像并保留 exif 数据?

    我有一个应用程序 可以通过以下方式将图像保存到相机胶卷中的自定义相册中 library writeImageToSavedPhotosAlbum newTestImage CGImage metadata metadata completi
  • Modal UIViewController 在 iPad 上总是全屏显示。为什么?

    我试图在 iPad 上创建一个简单的模式对话框 无论是小设置 UIModalPresentationFormSheet 还是大设置 UIModalPresentationPageSheet 但无论我做什么 它们都会全屏显示 带有标题栏 模态
  • 核心数据二进制数据允许外部存储崩溃

    我在 iOS 12 0 1 上发生崩溃 日志如下 ImageIO CFDataGetBytes data 0x28539b2f0 size 154262 offset 8 count 8 dst 0x16dbf86f0 External d
  • 如何更改标签栏图标颜色从默认蓝色?

    我有四个标签 我能够将选项卡图标颜色从默认的蓝色更改为红色 或可能任何颜色 并且效果非常好 问题是它仅适用于三个选项卡项目 最后一个选项卡默认为蓝色 下面是代码 我正在编码这个rootviewcontrollerAppDelegate m您
  • 在 Objective C 中断言每个对象创建都成功是必要的吗?

    我最近阅读了Apple的示例代码MVC网络 http developer apple com library ios samplecode MVCNetworking 由 Apple 开发者技术支持大师 Quinn The Eskimo 撰
  • UIView 子类中使用的 CAShapeLayer 不起作用

    我尝试了几个小时 用 CAShapeLayer 在 UIView 周围获得虚线边框 但我没有显示它 ScaleOverlay h import
  • 如何使用 UISlider 以及如何将滑块设置为特定值?

    我是第一次使用 UIslider 首先我想知道如果值的范围是 0 到 10 如何获取滑块位置的值 其次 我希望我的滑块设置为 5 个不同的值 如 1 2 3 4 5 slider should not set between the lab
  • iPhone 中的 UIGlassButton

    有人使用 Glass Button 提交过申请吗 获得批准了吗 我正在尝试使用彩色圆形按钮 但不想使用这些技巧 如何在 iPhone 上设置按钮背景颜色 https stackoverflow com questions 372731 ho
  • 允许用户从 UILabel 选择文本进行复制[重复]

    这个问题在这里已经有答案了 我有一个 UILabel 但如何允许用户选择其文本的一部分 我不希望用户能够编辑文本 也不希望标签 文本字段具有边框 这是不可能的UILabel 你应该使用UITextView为了那个原因 只需使用禁用编辑即可t
  • 如何同时关闭并弹出到视图控制器

    我的家庭视图控制器是Tabbarcontroller 从选项卡栏我导航到 A Viewcontroller TabarViewcontroller gt A 视图控制器 从A 视图控制器 我推 B 视图控制器 从B Viewcontroll
  • iOS:保持应用程序在后台运行

    如何让我的应用程序在后台运行 我需要越狱我的 iPhone 才能执行此操作吗 我只需要这个应用程序每隔设定的时间间隔从互联网上检查一些内容 并在需要时发出通知 以供我自己使用 是的 不需要越狱 查看本文档的 实现长时间运行的后台任务 部分A
  • iPhone Core Graphics 子视图的粗虚线

    我有一个UIView在其中我通过覆盖使用 Core Graphics 画了一条线drawRect 该视图还包含一个子视图 该子视图也绘制一条线 然而 虽然两个视图都使用几乎相同的代码 至少出于测试目的 但在它们上绘制的线看起来并不相同 正如
  • 如何自定义 NSSlider

    我正在尝试在 Cocoa 中实现一个具有 5 个值的自定义滑块 查看我的演示项目 可以在此处下载 http s000 tinyupload com index php file id 07311576247413689572 http s0
  • 在 UITableView 中设置滚动位置

    我有一个应用程序 其工作方式与 iPhone 的 联系人 应用程序的工作方式有些相似 当我们添加新的联系人时 用户将被定向到包含联系人信息的仅查看屏幕 如果我们从导航栏中选择 所有联系人 用户将导航到查看最近添加的联系人的所有联系人列表 我
  • 应用程序在第二次运行 nsnull 计数的循环时崩溃

    我有一个循环 第一次运行正常 但第二次循环时我得到 NSNull count unrecognized selector sent to instance 0x3a094a70 Terminating app due to uncaught
  • UITextField 字体大小在开始或停止输入字符时发生变化

    我见过很多线程 但没有找到解决这个问题的任何具体解决方案 我使用 XIB 创建了 UITextfield 尚未以编程方式对该字段执行任何操作 一旦我开始打字 文本字段的字体就会改变 一旦我将焦点移出文本字段 并且随着键盘消失 字体大小就会减
  • 在 Objective C 中使用下划线作为属性名称前缀 [重复]

    这个问题在这里已经有答案了 我以前避免在变量名中使用下划线 这可能是我大学 Java 时代的遗留下来的 因此 当我在 Objective C 中定义属性时 我自然会这样做 In the header interface Whatever N
  • iOS 上每个选项的带有图像的操作表

    有没有办法在 iOS 上将图像添加到操作表中 与苹果在应用程序商店或苹果音乐应用程序上所做的一样 我对苹果文档的基本搜索表明我没有在操作表中子类化或添加子视图 UIActionSheet 并非设计为子类化 也不应向其层次结构添加视图 苹果文
  • 在 UITableviewCell 高度动画的同时动画 CALayer 阴影

    我有一个 UITableView 我正在尝试使用它来展开和折叠beginUpdates and endUpdates方法并在发生时显示阴影 在我的自定义 UITableViewCell 中 我有一个图层 我为其创建阴影layoutSubvi

随机推荐