http://blog.csdn.net/huiguixian/article/details/17288909
- public class YuvToRGB {
- private static int R = 0;
- private static int G = 1;
- private static int B = 2;
- public static int[] I420ToRGB(byte[] src, int width, int height){
- int numOfPixel = width * height;
- int positionOfV = numOfPixel;
- int positionOfU = numOfPixel/4 + numOfPixel;
- int[] rgb = new int[numOfPixel*3];
- for(int i=0; i<height; i++){
- int startY = i*width;
- int step = (i/2)*(width/2);
- int startV = positionOfV + step;
- int startU = positionOfU + step;
- for(int j = 0; j < width; j++){
- int Y = startY + j;
- int V = startV + j/2;
- int U = startU + j/2;
- int index = Y*3;
- rgb[index+B] = (int)((src[Y]&0xff) + 1.4075 * ((src[V]&0xff)-128));
- rgb[index+G] = (int)((src[Y]&0xff) - 0.3455 * ((src[U]&0xff)-128) - 0.7169*((src[V]&0xff)-128));
- rgb[index+R] = (int)((src[Y]&0xff) + 1.779 * ((src[U]&0xff)-128));
- }
- }
- return rgb;
- }
- }