Superdry Memorandom :-p

旧「superdry memorandum :-D」です

ColorMatrixクラス

android.graphics.ColorMatrixという色空間変換に便利そうなクラスがありました。カメラ系アプリ作ってるとYUV->RGB変換はNative側とかでよくやるんですが、Java側でRGB->YUV変換はあまりやらないしめんどくさいなあと思ってたら、このクラスに変換テーブルがありました。

とりあえずRGB->YUV変換のメモ。

private int[] convertRGB2YUV(int color) {
	ColorMatrix cm = new ColorMatrix();
	cm.setRGB2YUV();
	final float[] yuvArray = cm.getArray();
	
	int r = Color.red(color);
	int g = Color.green(color);
	int b = Color.blue(color);
	int[] result = new int[3];
	result[0] = floatToByte(yuvArray[0] * r + yuvArray[1] * g + yuvArray[2] * b);
	result[1] = floatToByte(yuvArray[5] * r + yuvArray[6] * g + yuvArray[7] * b) + 127;
	result[2] = floatToByte(yuvArray[10] * r + yuvArray[11] * g + yuvArray[12] * b) + 127;
	return result;
}

private int floatToByte(float x) {
	int n = java.lang.Math.round(x);
	return n;
}

ColorMatrixになんのテーブルが欲しいかいったんセットしてgetArray()で取得すると、変換テーブルを得られます。U、Vに127を足すのを忘れないように…。

他にも、RGB値の回転などいろいろ色座標の変換に便利そうなメソッドがあります。Java側でやることはないかもしれないですけど。