libjpeg库解码jpeg图像输出数据排列问题

说干就干,从源码入手,在苍茫的代码之中游魂了快半个钟后发现了jdcolor.c文件中有这么一处

while (–num_rows >= 0) {inptr0 = input_buf[0][input_row];inptr1 = input_buf[1][input_row];inptr2 = input_buf[2][input_row];input_row++;outptr = *output_buf++;for (col = 0; col < num_cols; col++) {y = GETJSAMPLE(inptr0[col]);cb = GETJSAMPLE(inptr1[col]);cr = GETJSAMPLE(inptr2[col]);/* Range-limiting is essential due to noise introduced by DCT losses,* for extended gamut (sYCC) and wide gamut (bg-sYCC) encodings.*//* outptr[RGB_RED] = range_limit[y + Crrtab[cr]];outptr[RGB_GREEN] = range_limit[y +((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],SCALEBITS))];outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]];*/outptr[RGB_BLUE] = range_limit[y + Crrtab[cr]]; outptr[RGB_GREEN] = range_limit[y +((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],SCALEBITS))]; outptr[RGB_RED] = range_limit[y + Cbbtab[cb]];outptr += RGB_PIXELSIZE;} }

可以说是踏破铁鞋无觅处得来全不费工夫,这不正是我们要找的地方吗?!把其中的

outptr[RGB_RED] = range_limit[y + Crrtab[cr]];outptr[RGB_GREEN] = range_limit[y + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],SCALEBITS))];outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]] 改为outptr[RGB_BLUE] = range_limit[y + Crrtab[cr]];outptr[RGB_GREEN] = range_limit[y + ((int)RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS))];outptr[RGB_RED] = range_limit[y + Cbbtab[cb]];

编译,,完成!

去看日出,去散步,去欣赏大自然,

libjpeg库解码jpeg图像输出数据排列问题

相关文章:

你感兴趣的文章:

标签云: