Jpeglib開發筆記(一):JpegLib庫介紹、編譯、Demo和工程模板
原博主部落格地址:https://blog.csdn.net/qq21497936
本文章部落格地址:https://blog.csdn.net/qq21497936/article/details/86155043
Jpeglib開發筆記(一):JpegLib庫介紹、編譯、Demo和工程模板
前話
專案中抓取螢幕需要對HBITMAP影象,做同屏傳輸,需要進一步優化影象壓縮率,減少資料傳輸量,使用到JpegLib庫。
JpegLib介紹
JpegLib是一個用C編寫的jpeg影象壓縮免費庫,許多應用程式對jepg的支援都依賴於該庫。
JpegLib下載
下載地址:https://www.ijg.org/
點選對應檔案即可下載,如下圖:
工程模板下載地址:
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提供處理方法,可避免)
工程模板下載地址
https://download.csdn.net/download/qq21497936/10906472
後話
將會繼續研究jpeg壓縮,敬請期待!!!
原博主部落格地址:https://blog.csdn.net/qq21497936
本文章部落格地址:https://blog.csdn.net/qq21497936/article/details/86155043