欢迎您访问
最编程
本站为您分享编程语言代码,编程技术文章!
YUV转RGB的常见代码
...
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 startU = positionOfV + step;
int startV = positionOfU + step;
for(int j = 0; j < width; j++){
int Y = startY + j;
int U = startU + j/2;
int V = startV + j/2;
int index = Y*3;
RGB tmp = yuvTorgb(src[Y], src[U], src[V]);
rgb[index+R] = tmp.r;
rgb[index+G] = tmp.g;
rgb[index+B] = tmp.b;
}
}
return rgb;
}
private static class RGB{
public int r, g, b;
}
private static RGB yuvTorgb(byte Y, byte U, byte V){
RGB rgb = new RGB();
rgb.r = (int)((Y&0xff) + 1.4075 * ((V&0xff)-128));
rgb.g = (int)((Y&0xff) - 0.3455 * ((U&0xff)-128) - 0.7169*((V&0xff)-128));
rgb.b = (int)((Y&0xff) + 1.779 * ((U&0xff)-128));
rgb.r =(rgb.r<0? 0: rgb.r>255? 255 : rgb.r);
rgb.g =(rgb.g<0? 0: rgb.g>255? 255 : rgb.g);
rgb.b =(rgb.b<0? 0: rgb.b>255? 255 : rgb.b);
return rgb;
}
public static int[] YV16ToRGB(byte[] src, int width, int height){
int numOfPixel = width * height;
int positionOfU = numOfPixel;
int positionOfV = numOfPixel/2 + numOfPixel;
int[] rgb = new int[numOfPixel*3];
for(int i=0; i<height; i++){
int startY = i*width;
int step = i*width/2;
int startU = positionOfU + step;
int startV = positionOfV + step;
for(int j = 0; j < width; j++){
int Y = startY + j;
int U = startU + j/2;
int V = startV + j/2;
int index = Y*3;
RGB tmp = yuvTorgb(src[Y], src[U], src[V]);
rgb[index+R] = tmp.r;
rgb[index+G] = tmp.g;
rgb[index+B] = tmp.b;
}
}
return rgb;
}
public static int[] YV12ToRGB(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;
上一篇:
RGB
下一篇:
总结YUV色彩格式的综述