使用jpeglib直接把NV12转为jpeg文件的代码

简介: 使用jpeglib直接把NV12转为jpeg文件的代码

在网上找了好几套,结果都不对。后来终于找到一套,还缺了一点。于是连蒙带猜,终于保存成功了。

int clipNv12ToJpgFile(const char *pFileName,
    const char* pYUVBuffer, const int nWidth, const int nHeight)
{
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    JSAMPROW row_pointer[1];  
    FILE * pJpegFile = NULL;
    unsigned char *yuvbuf = NULL;
    unsigned char *ybase = NULL, *ubase = NULL;
    int i=0, j=0;
    int idx=0;
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);
    if ((pJpegFile = fopen(pFileName, "wb")) == NULL)
    {    
        return -1;
    }    
    jpeg_stdio_dest(&cinfo, pJpegFile);
    // image width and height, in pixels
    cinfo.image_width      = nWidth;
    cinfo.image_height     = nHeight;    
    cinfo.input_components = 3;    // # of color components per pixel
    cinfo.in_color_space   = JCS_YCbCr;  //colorspace of input image
    jpeg_set_defaults(&cinfo);
    jpeg_set_quality(&cinfo, JPEG_QUALITY, TRUE );
    cinfo.jpeg_color_space = JCS_YCbCr;
    cinfo.comp_info[0].h_samp_factor = 2;
    cinfo.comp_info[0].v_samp_factor = 2;
    jpeg_start_compress(&cinfo, TRUE);
    if(!(yuvbuf=(unsigned char *)malloc(nWidth*3))!=NULL)
    {
        return -1;
    }
    memset(yuvbuf, 0, nWidth*3);
    ybase=pYUVBuffer;
    ubase=pYUVBuffer+nWidth*nHeight;
    while (cinfo.next_scanline < cinfo.image_height)
    {
        idx=0;
        for(i=0;i<nWidth;i++)
        {   
            yuvbuf[idx++]=ybase[i + j * nWidth];
            yuvbuf[idx++]=ubase[j/2 * nWidth+(i/2)*2];
            yuvbuf[idx++]=ubase[j/2 * nWidth+(i/2)*2+1];
        }  
        row_pointer[0] = yuvbuf;
        jpeg_write_scanlines(&cinfo, row_pointer, 1);
        j++;
    }
    jpeg_finish_compress( &cinfo);
    jpeg_destroy_compress(&cinfo);
    fclose(pJpegFile);
    return 0;    
}
目录
相关文章
|
7月前
gstreamer将RTSP转jpg图片保存
gstreamer将RTSP转jpg图片保存
260 0
|
图形学
Qt&Vtk-003-读取jpg、png、dicom等格式图片
本文其实才能算是真正的Qt与Vtk结合,具体实现JPG、PNG、TIFF、DICOM、BMP及一个3D Cube显示。
698 1
Qt&Vtk-003-读取jpg、png、dicom等格式图片
|
存储
libjpeg解码 jpeg文件
libjpeg解码 jpeg文件
205 0
|
编解码 C#
使用ffmpeg将裸码文件转成wav文件
使用ffmpeg将裸码文件转成wav文件
使用ffmpeg将裸码文件转成wav文件
|
存储 算法 Java
详解PNG文件结构
详解PNG文件结构
644 0
详解PNG文件结构
使用jpeglib直接把NV12转为jpeg文件的代码
使用jpeglib直接把NV12转为jpeg文件的代码
151 0
|
并行计算
使用CUDA将NV12转换JPEG的代码
使用CUDA将NV12转换JPEG的代码
224 0
RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)
RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)
163 0
|
Ubuntu 计算机视觉
ffmpeg实现将图片转换为视频
##名称:ffmpeg实现将图片转换为视频 ##平台:ubuntu(已经安装好了ffmpeg工具) ##日期:2017年12月10日 简介: 因为学习需要,需要将连续图片转换成视频,昨天和今天早上用opencv实现了, 但是对于视频的处理用ffmpeg工具,更为强大。
2674 0