1. 程式人生 > >Jpeglib開發筆記(一):JpegLib庫介紹、編譯、Demo和工程模板

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