“无法解析外部的符号”问题,网上查了,也没有得到很好的解决方法;
于是,试着按部就班,编译jepglib的源代码开始:
网址:http://www.ijg.org/ 最新的时9的版本了,
解压出来以后,打开cmd运行命令:
在vc或者vs2010以下版本的:拷贝jconfig.vc文件里的内容到jconfig.h(需要自己新建),执行:“nmake /f makefile.vc”然后就会生成libjepg.lib,就可以拿来用了。
这样编译出来的lib文件在vs2010下使用的话会有一些列的“无法解析外部符号” 的问题。。
所以,下面是vs2010里面要用的lib文件编译方法:
不用新建jconfig.h文件,直接执行命令“nmake /f makefile.vc setup-v10”,生成一个sln文件,打开它再编译得到jpeg.lib,
在自己的工程中添加头文件jpeglib.h和jmorecfg.h,如果编译不通过,链接lib库:#pragam comment(lib, "jpeg.lib")
//代码基本就是这样一个流程:
/**********************
压缩图像 将bmp存为jpg
**********************/
//1,申请压缩对象、错误处理器
CString strJepgName = strFileName.Left(strFileName.ReverseFind('.')) + ".jpg";
struct jpeg_compress_struct jcs;
struct jpeg_error_mgr jem;
jcs.err = jpeg_std_error(&jem);
jpeg_create_compress(&jcs);
FILE *f= fopen(strJepgName,"wb");
if (f==NULL)
{
//delete [] data;
//delete [] pDataConv;
return 0;
}
jpeg_stdio_dest(&jcs, f);
jcs.image_width = bih.biWidth;
jcs.image_height = bih.biHeight;
jcs.input_components = 3;
jcs.in_color_space = JCS_RGB; // 24位RGB
jpeg_set_defaults(&jcs);
jcs.q_scale_factor[0] = jpeg_quality_scaling(100);
jcs.q_scale_factor[1] = jpeg_quality_scaling(100);
// 图像采样率,默认为2 * 2
jcs.comp_info[0].v_samp_factor = 1;
jcs.comp_info[0].h_samp_factor = 1;
jpeg_set_quality (&jcs, 100, true);
// 设定编码jpeg压缩质量
//jpeg_set_quality (&jcs, 100, true);
jpeg_start_compress(&jcs, TRUE);
JSAMPROW row_pointer[1]; // 一行位图
int row_stride; // 每一行的字节数
row_stride = jcs.image_width*3; //24位
int nAdjust = bih.biWidth*3%4;
if (nAdjust) nAdjust = 4-nAdjust;
// 对每一行进行压缩
while (jcs.next_scanline < jcs.image_height) {
row_pointer[0] = & pBuffer[(jcs.image_height-jcs.next_scanline-1) * (row_stride+nAdjust)];
jpeg_write_scanlines(&jcs, row_pointer, 1);
}
jpeg_finish_compress(&jcs);
jpeg_destroy_compress(&jcs);
fclose(f);
return 0;
代码可以运行,文件也生成了,但是。。
遗留了一个问题:
用directshow技术实现摄像头的获取和拍照功能,存储照片的时候有pBuffer参数存储了图片的内存信息,直接将这个值拿来压缩得到的图片 会有损坏,而先将这个buffer保存为bmp图片,然后打开这个图片,得到内存信息,再压缩,得到的jpg图片又是正常的。。

本文介绍了JPEGLib在VS2010中的正确编译方法,解决了“无法解析外部符号”的问题,并提供了一段用于将BMP转换为JPG的示例代码。同时,文章还讨论了直接使用摄像头缓冲区数据压缩时出现的问题。
1823

被折叠的 条评论
为什么被折叠?



