主题 : 图片压缩成jpg格式问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 18505
精华: 0
发帖: 48
金钱: 250 两
威望: 50 点
综合积分: 96 分
注册时间: 2010-04-10
最后登录: 2011-05-05
楼主  发表于: 2010-11-19 15:02

 图片压缩成jpg格式问题

我的摄像头采集到的240*320的图片大小为为225K(240*320*3),因为图片比较大,所有需要压缩一下,采用的压缩函数是write_jpeg函数(函数如下:),但是把压缩后采集到的图片放到pc机上打开时全是黑色的(这时图片大小为10几k),请问为什么?
注:不压缩时的225K图片放到pc机上可以正常显示。
int write_jpeg(char *filename,unsigned char *buf,int quality,int width, int height, int gray)
{
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE *fp;
    int i;
    unsigned char *line;
    int line_length;
    
    if (NULL == (fp = fopen(filename,"w")))
    {
                fprintf(stderr,"grab: can't open %s: %s\n",filename,strerror(errno));
                return -1;
    }
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);
    jpeg_stdio_dest(&cinfo, fp);
    cinfo.image_width  = width;
    cinfo.image_height = height;
    cinfo.input_components = gray ? 1: 3;
    cinfo.in_color_space = gray ? JCS_GRAYSCALE: JCS_RGB;
    jpeg_set_defaults(&cinfo);
    jpeg_set_quality(&cinfo, quality, TRUE);
    jpeg_start_compress(&cinfo, TRUE);

    line_length = gray ? width : width * 3;
    for (i = 0, line = buf; i < height; i++, line += line_length)
        jpeg_write_scanlines(&cinfo, &line, 1);
    
    jpeg_finish_compress(&(cinfo));
    jpeg_destroy_compress(&(cinfo));
    fclose(fp);

    return 0;
}
学习交流
级别: 新手上路
UID: 81752
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2012-11-13
最后登录: 2014-08-19
1楼  发表于: 2012-11-13 22:36
我发生过这个问题,不过原因不是在发生生后,而是在初始化的时候配置了一个关于颜色参数的结构体,配置色相时用起始参数加了个0,这样的话,如果起始就是0那么图片就必须是黑色的了~~~~~希望对您有帮助~~~哈哈~~~