若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/86155043
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)
Qt开发专栏:三方库开发技术
上一篇:没有了
下一篇:《Jpeglib开发笔记(二):JpegLib编译(ubutnu)和Demo》
前话
项目中抓取屏幕需要对HBITMAP图像,做同屏传输,需要进一步优化图像压缩率,减少数据传输量,使用到JpegLib库。
JpegLib介绍
JpegLib是一个用C编写的jpeg图像压缩免费库,许多应用程序对jepg的支持都依赖于该库。
JpegLib下载
下载地址:https://www.ijg.org/
点击对应文件即可下载,如下图:
QQ群:1047134658(点击“文件”搜索“jpeg”,群内与博文同步更新)
工程模板下载地址:
https://download.csdn.net/download/qq21497936/10906472
使用VS2017编译
步骤一:下载源码
先下载源码后解压到指定文件夹,如下图:
步骤二:使用vs2017命令行
在开始菜单中打开Vistual studio 2017名命行工具(开发应用是x86平台32位),进入源码文件夹,选下图:
步骤三:编译
执行源码文件夹下的makefile.vc
出现编译错误:
提示找不到win32.mak文件,在C盘搜索这个文件名,没有发现该文件,可以直接下一个
下载地址为:https://download.csdn.net/download/qq21497936/10905997
直接将该文件放到jpeg-9c的源码文件夹下,继续编译:
以上错误,经过摸索,解决方法是直接复制一份jconfig.vc,改变后缀变为jconfig.h,如下图:
继续编译,编译完成:
以上警告,可以忽略,已经生成了需要使用到的库,如下图:
模块化
Demo
步骤一:建立VC++空项目
使用vs2017建立VC空项目,如下图:
步骤二:将模块化代码考入Demo
、
步骤三:引入库
将文件路径包含进入项目,将库路径包含进项目
引入头文件(注意C++引入C),加载lib库,配置中添加头文件包含目录,配置中添加库名称,配置中添加库路径,总结如下图:
步骤四:贴入代码
#include <stdio.h> #include <stdlib.h> #include <string.h> extern "C" { #include "jpeglib.h" } #pragma comment(lib, "libjpeg.lib") int main(int argc, char **argv) { FILE *file; char fileName[256]; int width; int height; struct jpeg_decompress_struct jDecompressStruct; struct jpeg_error_mgr jErrorMgr; memset(fileName, 0x00, sizeof(fileName)); while (1) { printf("please input jpeg file (input \'q\' to exit): "); scanf("%s", fileName); if (strcmp(fileName, "q") == 0) { exit(0); } if ((file = fopen(fileName, "rb")) == 0) { fprintf(stderr, "can't open %s\n", fileName); continue; } // 初始化并申请解码器 jDecompressStruct.err = jpeg_std_error(&jErrorMgr); jpeg_create_decompress(&jDecompressStruct); // 指定图片文件信息 jpeg_stdio_src(&jDecompressStruct, file); // 读取头部信息 jpeg_read_header(&jDecompressStruct, TRUE); // 开始解码 jpeg_start_decompress(&jDecompressStruct); // 获取图片宽高 width = jDecompressStruct.image_width; height = jDecompressStruct.image_height; printf("decompress file:%s, %d x %d\n", fileName, width, height); // 释放解码器对象 jpeg_destroy_decompress(&jDecompressStruct); fclose(file); } return 0; }
运行效果
(注意:输入的文件非jpg会在jpeglib库文件中直接使应用退出,此处jpeglib.lib提供处理方法,可避免)
上一篇:没有了
下一篇:《Jpeglib开发笔记(二):JpegLib编译(ubutnu)和Demo》
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/86155043