#include<cstdio> 
#include"jpeglib.h"
#include"cv.h"
#include"highgui.h"using namespace std;
using namespace cv;#pragma comment(lib, "libjpeg.lib")
int savejpeg(char *filename, const Mat& img);int main()
{
Mat img = imread("lena.bmp",-1);
//imwrite("lenacv.jpg",img);

savejpeg("lenajpg.jpg", img);
return 0;
}
/*
 *jpeg压缩,filename是压缩之后的文件名,应为xxx.jpg
 *img是输入的图像数据
 */
int savejpeg(char *filename, const Mat& img)
{
unsigned char *data = img.data;
int width = img.cols;
int height = img.rows;
int depth = img.channels();
BYTE *image_buffer = (BYTE*)malloc(width*height*depth);
if(depth == 3)
{
for(int i = 0; i < width*height*3; i+=3)
{
*(image_buffer+i)= *(data+i+2);
*(image_buffer+i+1)=*(data+i+1);
*(image_buffer+i+2)=*(data+i);
} }else
{
image_buffer = data;
} struct jpeg_compress_struct jcs;
struct jpeg_error_mgr jem;
jcs.err = jpeg_std_error(&jem); jpeg_create_compress(&jcs);
FILE *f = fopen(filename,"wb");
if(f == NULL)
{
printf("Can't write to file %s \n", filename);
return 1;
}
jpeg_stdio_dest(&jcs, f); jcs.image_width = width;
jcs.image_height = height; jcs.input_components = depth;
if(depth == 1)
{
jcs.in_color_space = JCS_GRAYSCALE;//单通道灰度图
}else
{
jcs.in_color_space = JCS_RGB;//彩色图
}
jpeg_set_defaults(&jcs);
jpeg_set_quality(&jcs, 85, true); //85为jpeg图片的质量 jpeg_start_compress(&jcs, TRUE);
JSAMPROW row_pointer[1];
int row_stride;
row_stride = jcs.image_width*depth; while (jcs.next_scanline < jcs.image_height) 
{
row_pointer[0] = & image_buffer[jcs.next_scanline * row_stride];
jpeg_write_scanlines(&jcs, row_pointer, 1);
} jpeg_finish_compress(&jcs);
jpeg_destroy_compress(&jcs); fclose(f); return 0;
}
运行结果显示:
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(32): error C2065: “BYTE”: 未声明的标识符
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(32): error C2065: “image_buffer”: 未声明的标识符
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(32): error C2065: “BYTE”: 未声明的标识符
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(32): error C2059: 语法错误:“)”
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(37): error C2065: “image_buffer”: 未声明的标识符
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(38): error C2065: “image_buffer”: 未声明的标识符
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(39): error C2065: “image_buffer”: 未声明的标识符
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(44): error C2065: “image_buffer”: 未声明的标识符
1>c:\users\administrator\desktop\testjpeg\testhaha\test.cpp(81): error C2065: “image_buffer”: 未声明的标识符