for (c = 0; c < bmp_wd; c++) { y = bufy [c]; u = bufu [c >> 1] - 128;
v = bufv [c >> 1] - 128; R = y + 1.375 * v; G = y - 0.34375 * u - 0.703125 * v; B = y + 1.734375 * u; R = max (0, min (255, R)); G = max (0, min (255, G)); B = max (0, min (255, B));
{
const int bmp_wd =352;
const int bmp_ht=288;
unsigned char *bufy , *bufu , *bufv;
short int r, c,R, G, B, y, u, v;
byte* yuvBuf;
yuvBuf=buffer;
bufy = yuvBuf;
bufu = yuvBuf + bmp_wd * bmp_ht;
bufv = yuvBuf + bmp_wd * bmp_ht * 3/2;
long iIndex=0;
for (r = 0; r < bmp_ht; r++) {
for (c = 0; c < bmp_wd; c++) {
y = bufy [c];
u = bufu [c >> 1] - 128;
v = bufv [c >> 1] - 128; R = y + 1.375 * v;
G = y - 0.34375 * u - 0.703125 * v;
B = y + 1.734375 * u;
R = max (0, min (255, R));
G = max (0, min (255, G));
B = max (0, min (255, B));
pbR[iIndex+c]=R;
pbG[iIndex+c]=G;
pbB[iIndex+c]=B;
}
bufy += bmp_wd;
bufu += bmp_wd/2;
bufv += bmp_wd/2;
iIndex+=bmp_wd;
}
}
这是YUV转RGB的算法,这样就可以得到BMP再转JPEG就不难了!
我在网上看了一些文章,JPEG本身就是YUV格式的,转RGB是绕远路了,
我自己做了一个库,转换成功。
但是问题大了,转出来的图片太亮了。我的量化表,DCT,HUFFMAN都是用的标准的。
不知道为什么会出现这种情况。
偶土了...