コード自体はいままで何回も書いている気がしますが、自分のブログを探しても見つからなかったので、次にSwiftでRGBからYCbCrを計算したいときにコピペして使うようにの備忘録として記事を残しておきます。
YCbCrのフォーマットについて
12年ほど前にRGB888からYCbCr422に変換するC言語のコードを書いていたようです。当時はカメラモジュールから取得したYCbCr422をパソコンでみるためのビューアアプリを作るため、テストデータとしてRGB888からYCbCrに変換するコードを書いていました。
UIColorからYCbCrを求める
UIColorからYCbCrを求めてみました。今回も YCbCr-RGBの変換について詳しく書かれているこちらのサイトを参考にさせて頂きました。
struct YCbCr { let y: CGFloat let cb: CGFloat let cr: CGFloat static var zero: YCbCr { return YCbCr(y: 128, cb: 128, cr: 128) } } extension UIColor { func ycbcr() -> YCbCr? { guard let comp = self.cgColor.components else { return nil } // ITU-R BT.601に基づいた計算式を使用しております // Y = 0.257R + 0.504G + 0.098B + 16 // Cb = -0.148R - 0.291G + 0.439B + 128 // Cr = 0.439R - 0.368G - 0.071B + 128 let red = comp[0] * 255 let blue = comp[1] * 255 let green = comp[2] * 255 let y = 0.257 * red + 0.504 * blue + 0.098 * green + 16 let cb = -0.148 * red - 0.291 * blue + 0.439 * green + 128 let cr = 0.439 * red - 0.368 * blue - 0.071 * green + 128 return YCbCr(y: y, cb: cb, cr: cr) } }
関連記事
この他にもiOSアプリ開発で見つけたネタや悩んだ内容など紹介しています。Tipsをまとめておりますのでこちらのページをご参照ください。