1

要在Objective-C中创建 CVPixelBuffer 属性,我会这样做:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
                         [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
                         nil];

然后在CVPixelBufferCreate肉类中,我将(__bridge CFDictionaryRef) attributes作为参数传递。

Swift中,我试图像这样创建我的字典:

let attributes:[CFString : NSNumber] = [
        kCVPixelBufferCGImageCompatibilityKey : NSNumber(bool: true),
        kCVPixelBufferCGBitmapContextCompatibilityKey : NSNumber(bool: true)
    ]

但我发现 CFString 不是可哈希的,而且我一直无法让它工作。

有人可以提供一个例子来说明这在 Swift 中是如何工作的吗?

4

1 回答 1

3

只需使用 NSString 代替:

let attributes:[NSString : NSNumber] = // ... the rest is the same

毕竟,这就是你在 Objective-C 代码中真正做的事情。只是 Objective-C 为你做了桥接。CFString 不能是 Objective-C 字典中的键,也不能是 Swift 字典中的键。

另一种(也许是 Swiftier)方法是这样写:

let attributes : [NSObject:AnyObject] = [
    kCVPixelBufferCGImageCompatibilityKey : true,
    kCVPixelBufferCGBitmapContextCompatibilityKey : true
]

请注意,通过这样做,我们也不必包装trueNSNumber;这将由 Swift 的自动桥接为我们处理。

于 2015-12-03T22:22:29.540 回答