由於之前做的項目剛剛好設備傳過來的圖像數據就是JPEG格式的,如果將每幀圖像數據都保存成文件然後再借助開源庫提供的接口去讀入文件會顯得很掉價,所以做了一些直接解碼內存中JPEG數據的研究。經過對比發現libjpeg庫對JPEG圖像的編解碼支持甚好,而且相對於OpenCV庫,複雜度小很多,是故就決定動手來實現我自己想要的接口。
所謂“巧婦難爲無米之炊”,要用libjpeg庫,第一步自然是去下載其源碼,下載地址在這裏。
下載完解解壓後,就要去編譯libjpeg庫了,這裏我主要參考的是這篇文章和這篇文章。因爲第一篇用的是VS2012,有些路徑跟本文設置略有差別,所以如果你用的是VS2012,請毫不猶豫的點開鏈接,跟着他的步驟做吧。當然還是要說,VS2013實在是好用太多。
OK,現在開始做編譯的準備工作,其實也就兩步:
第一步:找到剛剛解壓出來的“jpeg-9a”文件夾下面的“makefile.vc”文件,用記事本或Notepad++等編輯工具打開,然後找到裏面的“!include <win32.mak>”,將“win32.mak”改爲絕對路徑。不難看出這個win32.mak是個文件,其是VS下的一個文件,所以路徑就跟你自己裝的VS版本有關,本人裝的是VS2013版本,默認情況下該版本中這個文件在“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include”這個目錄下。因而我們將剛剛搜索到的那句話改爲“!include <C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\win32.mak>”就OK了。
第二步:打開VS2013的命令行:“VS2013 x86 本機工具命令提示”,這個用開始菜單打開會方便點,直接找到“Visual Studio 2013”這一項,打開裏面的“Visual Studio Tools”文件夾就可以看到。如果是Win8的用戶則建議去裝個開始菜單工具,不然就去VS的安裝目錄下面找。打開命令行之後CD到解壓出來的“jpeg-9a”目錄下,輸入“nmake /f makefile.vc setup-v10”,回車,待命令行執行完命令後,準備工作就大功告成啦。關於命令行的操作,具體如下圖:
下面來做編譯,其實已經沒什麼難點了,上面工作做完之後,“jpeg-9a”文件夾下面會生成一個VS的工程。直接運行裏面的“jpeg.sln”,然後VS提示要升級編譯器什麼的點是,進入編程界面後直接編譯就大功告成了。編譯完成後在“jpeg-9a”文件夾下的“Release”文件夾中可以看到一個“jpeg.lib”文件,這個就是我們剛剛編譯出來的靜態鏈接庫。
要使用這個靜態鏈接庫,只要先包含進jconfig.h,jmorecfg.h,jpeglib.h這三個頭文件,然後把剛剛編譯出來的jpeg.lib加進工程中就可以了。習慣上會把jpeg.lib改名爲libjpeg.lib。下面提供一個jpeg轉bmp的例子,代碼是基本照搬這篇文章的,只是做了少量修改。
已經生成好的vc工程文件地址:http://download.csdn.net/detail/huangyifei_1111/9666930