如何在 Swift 中创建 CVPixelBuffer 属性字典
How to create CVPixelBuffer attributes dictionary in Swift
要在 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 不是 Hashable 并且好吧,我一直无法让它工作。
有人可以提供一个示例说明它在 Swift 中的工作原理吗?
只需使用 NSString 代替:
let attributes:[NSString : NSNumber] = // ... the rest is the same
毕竟,这就是您在 Objective-C 代码中真正做的事情;只是 Objective-C 为您搭建了桥梁。 CFString 不能是 Objective-C 字典中的键,也不能是 Swift 字典中的键。
另一种(可能 Swift 以上)的方式是这样写:
let attributes : [NSObject:AnyObject] = [
kCVPixelBufferCGImageCompatibilityKey : true,
kCVPixelBufferCGBitmapContextCompatibilityKey : true
]
请注意,通过这样做,我们也不必将 true
包装在 NSNumber 中; Swift 的桥接会自动为我们处理。
要在 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 不是 Hashable 并且好吧,我一直无法让它工作。
有人可以提供一个示例说明它在 Swift 中的工作原理吗?
只需使用 NSString 代替:
let attributes:[NSString : NSNumber] = // ... the rest is the same
毕竟,这就是您在 Objective-C 代码中真正做的事情;只是 Objective-C 为您搭建了桥梁。 CFString 不能是 Objective-C 字典中的键,也不能是 Swift 字典中的键。
另一种(可能 Swift 以上)的方式是这样写:
let attributes : [NSObject:AnyObject] = [
kCVPixelBufferCGImageCompatibilityKey : true,
kCVPixelBufferCGBitmapContextCompatibilityKey : true
]
请注意,通过这样做,我们也不必将 true
包装在 NSNumber 中; Swift 的桥接会自动为我们处理。