当前位置: 技术问答>linux和unix
求助,关于压缩JPEG的程序的问题
来源: 互联网 发布时间:2015-11-15
本文导语: 我现在做的东西是在linux环境下,使用摄相头取得图象,并将其存成JPEG格式的文件。 我的程序采集图象没有问题,已经能存成PPM格式,但在存储成JPEG格式时出了问题。 按照书上和网上的方法(都一样),将buffer中的...
我现在做的东西是在linux环境下,使用摄相头取得图象,并将其存成JPEG格式的文件。
我的程序采集图象没有问题,已经能存成PPM格式,但在存储成JPEG格式时出了问题。
按照书上和网上的方法(都一样),将buffer中的影像数据压缩成JPEG,我写了代码:
int write_jpeg(char *filename,unsigned char *img,int width,int height,int quality,int gray)
{
struct jpeg_compress_struct jcfg;
struct jpeg_error_mgr jerr;
FILE *fp;
unsigned char *line;
int line_length;
int i;
if ((fp = fopen(filename,"w") == NULL)
{
fprintf(stderr,"write_jpeg:can't open %sn",filename);
return -1;
}
jcfg.err = jpeg_std_error(&jerr); //jpeg_std_error
printf("here we have a test!n";
jpeg_creat_compress(&jcfg);
//jpeg_creat_compress
jpeg_stdio_dest(&jcfg,fp); //jpeg_stdio_dest
jcfg.image_width = width;
jcfg.image_height = height;
jcfg.input_components = gray? 1 : 3;
jcfg.in_color_space = gray? JCS_GRAYSCALE : JCS_RGB;
jpeg_set_defaults(&jcfg); //jpeg_set_defaults
jpeg_set_quality(&jcfg,quality,TRUE); //jpeg_set_quality
jpeg_start_compress(&jcfg,TRUE); //jpeg_start_compress
line_length = gray ? width : width*3;
for(i = 0,line =img; i
我的程序采集图象没有问题,已经能存成PPM格式,但在存储成JPEG格式时出了问题。
按照书上和网上的方法(都一样),将buffer中的影像数据压缩成JPEG,我写了代码:
int write_jpeg(char *filename,unsigned char *img,int width,int height,int quality,int gray)
{
struct jpeg_compress_struct jcfg;
struct jpeg_error_mgr jerr;
FILE *fp;
unsigned char *line;
int line_length;
int i;
if ((fp = fopen(filename,"w") == NULL)
{
fprintf(stderr,"write_jpeg:can't open %sn",filename);
return -1;
}
jcfg.err = jpeg_std_error(&jerr); //jpeg_std_error
printf("here we have a test!n";
jpeg_creat_compress(&jcfg);
//jpeg_creat_compress
jpeg_stdio_dest(&jcfg,fp); //jpeg_stdio_dest
jcfg.image_width = width;
jcfg.image_height = height;
jcfg.input_components = gray? 1 : 3;
jcfg.in_color_space = gray? JCS_GRAYSCALE : JCS_RGB;
jpeg_set_defaults(&jcfg); //jpeg_set_defaults
jpeg_set_quality(&jcfg,quality,TRUE); //jpeg_set_quality
jpeg_start_compress(&jcfg,TRUE); //jpeg_start_compress
line_length = gray ? width : width*3;
for(i = 0,line =img; i