首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你是如何从Unmanaged<CGColorSpace>获得CGColorSpace的?

你是如何从Unmanaged<CGColorSpace>获得CGColorSpace的?
EN

Stack Overflow用户
提问于 2015-02-06 08:29:43
回答 1查看 878关注 0票数 2

我正在用Swift编写一个函数,它从一个vImage_CGImageFormat创建一个CGImage,如下所示:

代码语言:javascript
复制
vImage_CGImageFormat(
    bitsPerComponent: UInt32(CGImageGetBitsPerComponent(image)), 
    bitsPerPixel: UInt32(CGImageGetBitsPerPixel(image)), 
    colorSpace: CGImageGetColorSpace(image), 
    bitmapInfo: CGImageGetBitmapInfo(image), 
    version: UInt32(0), 
    decode: CGImageGetDecode(image), 
    renderingIntent: CGImageGetRenderingIntent(image))

然而,这并不能编译。这是因为CGImageGetColorSpace(image)返回CGColorSpace!,上面的构造函数只将Unmanaged<CGColorSpace>作为colorSpace参数。

还有别的办法吗?也许将CGColorSpace转换为Unmanaged<CGColorSpace>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-06 08:49:41

这应该是可行的:

代码语言:javascript
复制
vImage_CGImageFormat(
    // ...
    colorSpace: Unmanaged.passUnretained(CGImageGetColorSpace(image)),
    //...
)

来自struct Unmanaged<T> API文档:

代码语言:javascript
复制
/// Create an unmanaged reference without performing an unbalanced
/// retain.
///
/// This is useful when passing a reference to an API which Swift
/// does not know the ownership rules for, but you know that the
/// API expects you to pass the object at +0.
///
/// ::
///
///   CFArraySetValueAtIndex(.passUnretained(array), i,
///                          .passUnretained(object))
static func passUnretained(value: T) -> Unmanaged<T>

Swift 3的更新:

代码语言:javascript
复制
vImage_CGImageFormat(
    // ...
    colorSpace: Unmanaged.passUnretained(image.colorSpace!),
    //...
)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28361530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档