【发布时间】:2019-10-15 22:05:28
【问题描述】:
我们有一段代码绘制到 NSImage(具有漂亮背景的文本),然后将其转换为 NSBitmapImageRep 用作纹理(最初是 OpenGL,现在是 Metal)。多年来,它已在数千台客户机器上顺利运行。
伪代码:
image = [[NSImage alloc] initWithSize:size];
[image lockFocus];
//Do drawing
bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:rect];
[image unlockFocus];
//Generate texture using [bitmap bitmapData];
现在我们有一位客户使用运行 macOS 10.15 的全新 MacBook,但纹理已损坏。我们已经追踪到使用浮点样本创建的 NSBitmapImageRep。
我还注意到 initWithFocusedViewRect 现在已被弃用。我尝试使用 [image CGImageForProposedRect],然后从 CGImage 创建 NSBitmapImageRep,但这与浮点样本有相同的问题。
所以我的问题是:
- 是否可以将 NSBitmapImageRep 转换为我们需要的格式(8 位整数样本,32bpp)?
- 或者,如果我使用允许我指定所需格式的 NSBitmapImageRep 初始化程序之一,我如何从 NSImage 中获取数据?
- 或者,还有其他方法可以做到这一点吗?
【问题讨论】:
标签: objective-c cocoa opengl metal