iOSでUIColor
からYCbCrを求めました。
本記事ではAndroid-JavaでColor
からYCbCrを計算してみました。
YCbCrのフォーマットについて
12年ほど前にRGB888からYCbCr422に変換するC言語のコードを書いていたようです。当時はカメラモジュールから取得したYCbCr422をパソコンでみるためのビューアアプリを作るため、テストデータとしてRGB888からYCbCrに変換するコードを書いていました。
ColorからYCbCrを求める
ColorからYCbCrを求めてみました。今回も YCbCr-RGBの変換について詳しく書かれているこちらのサイトを参考にさせて頂きました。
public class YCbCr { public double y; public double cb; public double cr; public YCbCr(double y, double cb, double cr) { this.y = y; this.cb = cb; this.cr = cr; } public static YCbCr zero() { return new YCbCr(128, 128, 128); } }
import android.graphics.Color; public class ColorUtil { public static YCbCr convertYCbCr(int color) { final double red = (double) Color.red(color); final double green = (double) Color.green(color); final double blue = (double) Color.blue(color); // 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 final double y = 0.257 * red + 0.504 * blue + 0.098 * green + 16; final double cb = -0.148 * red - 0.291 * blue + 0.439 * green + 128; final double cr = 0.439 * red - 0.368 * blue - 0.071 * green + 128; return new YCbCr(y, cb, cr); } }