在 Swift 中为 int32 pixelFormat 输入什么?
What to type in for int32 pixelFormat in Swift?
我想使用函数 CGDisplayStreamCreateWithDispatchQueue。
文档告诉我为 "pixelFormat" 使用以下可能的值:
(参数需要是 Int32)
The desired Core Media pixel format of the output frame data. The value must be one of the following:
'BGRA': Packed Little Endian ARGB8888
'l10r': Packed Little Endian ARGB2101010
'420v': 2-plane "video" range YCbCr 4:2:0
'420f': 2-plane "full" range YCbCr 4:2:0
如果我输入例如 'BGRA',那么 Xcode 会告诉我这是一个无效参数。怎么办?
在 C 语言中,您可以指定一个多字符常量,它会产生 int32
值。 Swift 本身不提供此功能。您可以只传递等效常量。
对于 'BGRA'
你需要通过 0x42475241
。 0x42
是 B
的 ASCII 值,0x47
是 G
的 ASCII 值,等等
我通过在 C
中创建此函数验证了这一点:
int32_t convertBGRA() {
int32_t i = 'BGRA';
return i;
}
并从 Swift 调用它:
print(String(format: "%x", convertBGRA())) // output: "42475241"
以下是所有值:
let pixelFormat_BGRA = 0x42475241
let pixelFormat_l10r = 0x6c313072
let pixelFormat_420v = 0x34323076
let pixelFormat_420f = 0x34323066
这是 Int32
的扩展,它从 4 个字符的字符串初始化值。
extension Int32 {
init?(char4: String) {
var result: UInt32 = 0
let scalars = char4.unicodeScalars
if scalars.count != 4 {
return nil
} else {
for s in scalars {
let value = s.value
if value > 255 {
return nil
}
result = result << 8 + value
}
self = Int32(bitPattern: result)
}
}
}
对于 'BGRA'
的输入,您将使用:
Int32(char4: "BGRA")!
我想使用函数 CGDisplayStreamCreateWithDispatchQueue。
文档告诉我为 "pixelFormat" 使用以下可能的值: (参数需要是 Int32)
The desired Core Media pixel format of the output frame data. The value must be one of the following:
'BGRA': Packed Little Endian ARGB8888
'l10r': Packed Little Endian ARGB2101010
'420v': 2-plane "video" range YCbCr 4:2:0
'420f': 2-plane "full" range YCbCr 4:2:0
如果我输入例如 'BGRA',那么 Xcode 会告诉我这是一个无效参数。怎么办?
在 C 语言中,您可以指定一个多字符常量,它会产生 int32
值。 Swift 本身不提供此功能。您可以只传递等效常量。
对于 'BGRA'
你需要通过 0x42475241
。 0x42
是 B
的 ASCII 值,0x47
是 G
的 ASCII 值,等等
我通过在 C
中创建此函数验证了这一点:
int32_t convertBGRA() {
int32_t i = 'BGRA';
return i;
}
并从 Swift 调用它:
print(String(format: "%x", convertBGRA())) // output: "42475241"
以下是所有值:
let pixelFormat_BGRA = 0x42475241
let pixelFormat_l10r = 0x6c313072
let pixelFormat_420v = 0x34323076
let pixelFormat_420f = 0x34323066
这是 Int32
的扩展,它从 4 个字符的字符串初始化值。
extension Int32 {
init?(char4: String) {
var result: UInt32 = 0
let scalars = char4.unicodeScalars
if scalars.count != 4 {
return nil
} else {
for s in scalars {
let value = s.value
if value > 255 {
return nil
}
result = result << 8 + value
}
self = Int32(bitPattern: result)
}
}
}
对于 'BGRA'
的输入,您将使用:
Int32(char4: "BGRA")!