链接地址:https://zhuanlan.zhihu.com/p/37354802
#define RAW_HORIZION 2592
#define RAW_VERTICAL 1944
//the layout can not be modified, RGB color mode
#define RED 0
#define GREEN 1
#define BLUE 2
char g_raw_array[RAW_VERTICAL][RAW_HORIZION] = {0};
char g_rgb_array[RAW_VERTICAL][RAW_HORIZION][3] = {0};
bool raw_interpolation(char *raw_array, char *rgb_array, unsigned int piexl_horizion, unsigned int pixel_vertical){
unsigned int x, y;
//row loop
for(y=0; y<pixel_vertical; y++){
//column loop
for(x=0; x<piexl_horizion; x++){
//RGB channel
if(y%2){//this odd row, first piexl is green
if(x%2){//this piexl is red
//rgb_array[y][x][RED] = raw_array[y][x];
*(rgb_array+y*piexl_horizion*3+x*3+RED) = *(raw_array+y*piexl_horizion+x);
//rgb_array[y][x][GREEN] = (raw_array[y-1][x] + raw_array[y+1][x] + raw_array[y][x-1] + raw_array[y][x+1])/4;
*(rgb_array+y*piexl_horizion*3+x*3+GREEN) = (*(raw_array+(y-1)*piexl_horizion+x)+*(raw_array+(y+1)*piexl_horizion+x)+*(raw_array+y*piexl_horizion+(x-1))+*(raw_array+y*piexl_horizion+(x+1)))/4;
//rgb_array[y][x][BLUE] = (raw_array[y-1][x-1] + raw_array[y-1][x+1] + raw_array[y+1][x-1] + raw_array[y+1][x+1])/4;
*(rgb_array+y*piexl_horizion*3+x*3+BLUE) = (*(raw_array+(y-1)*piexl_horizion+(x-1))+*(raw_array+(y-1)*piexl_horizion+(x+1))+*(raw_array+(y+1)*piexl_horizion+(x-1))+*(raw_array+(y+1)*piexl_horizion+(x+1)))/4;
}else{//this piexl is green_odd
//rgb_array[y][x][RED] = (raw_array[y][x-1] + raw_array[y][x+1])/2;
*(rgb_array+y*piexl_horizion*3+x*3+RED) = (*(raw_array+y*piexl_horizion+(x-1))+*(raw_array+y*piexl_horizion+(x+1)))/2;
//rgb_array[y][x][GREEN] = raw_array[y][x];
*(rgb_array+y*piexl_horizion*3+x*3+GREEN) = *(raw_array+y*piexl_horizion+x);
//rgb_array[y][x][BLUE] = (raw_array[y-1][x] + raw_array[y+1][x])/2;
*(rgb_array+y*piexl_horizion*3+x*3+BLUE) = (*(raw_array+(y-1)*piexl_horizion+x) + *(raw_array+(y+1)*piexl_horizion+x))/2;
}
}else{//this even row, first piexl is blue
if(x%2){//this piexl is green_even
//rgb_array[y][x][RED] = (raw_array[y-1][x] + raw_array[y+1][x])/2;
*(rgb_array+y*piexl_horizion*3+x*3+RED) = (*(raw_array+(y-1)*piexl_horizion+x) + *(raw_array+(y+1)*piexl_horizion+x))/2;
//rgb_array[y][x][GREEN] = raw_array[y][x];
*(rgb_array+y*piexl_horizion*3+x*3+GREEN) = *(raw_array+y*piexl_horizion+x);
//rgb_array[y][x][BLUE] = (raw_array[y][x-1] + raw_array[y][x+1])/2;
*(rgb_array+y*piexl_horizion*3+x*3+BLUE) = (*(raw_array+y*piexl_horizion+(x-1))+*(raw_array+y*piexl_horizion+(x+1)))/2;
}else{//this piexl is blue
//rgb_array[y][x][RED] = (raw_array[y-1][x-1] + raw_array[y-1][x+1] + raw_array[y+1][x-1] + raw_array[y+1][x+1])/4;
*(rgb_array+y*piexl_horizion*3+x*3+RED) = (*(raw_array+(y-1)*piexl_horizion+(x-1))+*(raw_array+(y-1)*piexl_horizion+(x+1))+*(raw_array+(y+1)*piexl_horizion+(x-1))+*(raw_array+(y+1)*piexl_horizion+(x+1)))/4;
//rgb_array[y][x][GREEN] = (raw_array[y-1][x] + raw_array[y+1][x] + raw_array[y][x-1] + raw_array[y][x+1])/4;
*(rgb_array+y*piexl_horizion*3+x*3+GREEN) = (*(raw_array+(y-1)*piexl_horizion+x)+*(raw_array+(y+1)*piexl_horizion+x)+*(raw_array+y*piexl_horizion+(x-1))+*(raw_array+y*piexl_horizion+(x+1)))/4;
//rgb_array[y][x][BLUE] = raw_array[y][x];
*(rgb_array+y*piexl_horizion*3+x*3+BLUE) = *(raw_array+y*piexl_horizion+x);
}
}
}
}
return true;
}
网友评论