请问YUV转JPEG是否是要先转成BMP?请给出算法或者例子。谢谢了。

解决方案 »

  1.   

    void yuv_rgb (BYTE *buffer,BYTE *pbR,BYTE *pbG,BYTE *pbB) 
    {

    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就不难了!
      

  2.   

    谢谢哈。你的参数是什么?转JPEG呢?
      

  3.   

    我只有YUV转RGB的,至于BMP转JPEG我这也没有现成的代码!参数是YUV转成R,G,B分量
      

  4.   

    我记得 jpeg 是对 YUV 数据进行 dct 变换然后再 haffman 数据压缩
      

  5.   

    yuv_jpg这样太慢。应该给ddraw写个jpg的输出,然后用ddraw读入yuv
      

  6.   

    我要纯C的代码谢谢楼上的。to gboy:
    我在网上看了一些文章,JPEG本身就是YUV格式的,转RGB是绕远路了,
    我自己做了一个库,转换成功。
    但是问题大了,转出来的图片太亮了。我的量化表,DCT,HUFFMAN都是用的标准的。
    不知道为什么会出现这种情况。
      

  7.   

    你去参考一下CxImage的源码,也许会有帮助的~
      

  8.   

    yuv是什么啊.以前没听说过啊
    偶土了...