1

vImage_CGImageFormat次のように aから aを作成する Swift の関数を作成してCGImageいます。

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)returnCGColorSpace!と上記のコンストラクターがパラメーターのみを受け取るUnmanaged<CGColorSpace>ためです。colorSpace

これを行う別の方法はありますか?おそらくに変換CGColorSpaceUnmanaged<CGColorSpace>ますか?

4

1 に答える 1

5

これはうまくいくはずです:

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!),
    //...
)
于 2015-02-06T08:49:41.147 に答える