2

関数 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 はこれが無効な引数であると通知します。どうする?

4

1 に答える 1

1

C言語では、結果が値になる複数文字の定数を指定できますint32Swiftはこれをネイティブに提供していません。同等の定数を渡すだけです。

'BGRA'あなたは渡す必要があるからです0x424752410x42は の ASCII 値B0x47は の ASCII 値Gなどです。

でこの関数を作成してこれを確認しました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")!
于 2015-10-25T15:28:49.887 に答える