如何从 CGColorSpace 获得 Unmanaged<CGColorSpace>?
Posted
技术标签:
【中文标题】如何从 CGColorSpace 获得 Unmanaged<CGColorSpace>?【英文标题】:How do you get Unmanaged<CGColorSpace> from CGColorSpace? 【发布时间】:2015-02-06 08:29:43 【问题描述】:我正在用 Swift 编写一个函数,它从 CGImage
创建一个 vImage_CGImageFormat
,如下所示:
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>
?
【问题讨论】:
【参考方案1】:这应该可行:
vImage_CGImageFormat(
// ...
colorSpace: Unmanaged.passUnretained(CGImageGetColorSpace(image)),
//...
)
来自struct Unmanaged<T>
API 文档:
/// 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 更新:
vImage_CGImageFormat(
// ...
colorSpace: Unmanaged.passUnretained(image.colorSpace!),
//...
)
【讨论】:
先生,君子,书生以上是关于如何从 CGColorSpace 获得 Unmanaged<CGColorSpace>?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 上的 CGColorSpace API 和颜色管理状态?