當前位置:首頁 » 編程軟體 » 編譯libjpeg源碼

編譯libjpeg源碼

發布時間: 2022-06-08 12:55:30

Ⅰ 如何用vs和makefile文件進行編譯

運行cmd.exe (or command.com in win9x)->進到vc/bin目錄->運行vc-vars32.bat->進到makefile 所在的目錄->nmake /f makefile
從sourceforge上下載下來的libjpeg源代碼中有一個makefile.vc的文件,可以通過nmake /f makefile.vc [nodebug=1]來編譯libjpeg,但是只能編譯靜態庫,如果需要編譯dll以便在emacs等程序中使用的話,需要修改makefile.vc和jmorecfg.h文件。在makefile.vc文件中添加編譯dll規則:
以下內容為程序代碼:
libjpeg.lib: $(LIBOBJECTS) $(RM) libjpeg.lib lib -out:libjpeg.lib $(LIBOBJECTS) #
添加以下這行 libjpeg.dll: $(LIBOBJECTS) $(RM) libjpeg.dll link -dll -out:libjpeg.dll $(LIBOBJECTS) 在jmorecfg.h中添加#define _WIN32_#define JPEG_DLL 然後nmake /f makefile.vc nodebug=1就可以編譯了。
將makefile復制為一個.mak文件,然後用VC打開即可!
.mak 就是一個makefile
可以指定怎樣編譯(命令行,必須先設置VC命令行環境)
vcvars32.bat可設置環境,在vc98/bin下 nmake /f XXXX.mak
如果有一個makefile就只要nmake就可以了。

Ⅱ 如何用visual studio編譯ijg jpeg庫

1、到IJG官方網站上下載JPEG庫的源代碼,目前最新的版本是第9版
2、解壓源代碼到一個文件夾中,
3、使用Visual Studio 2010自帶的Visual Studio tools裡面的command prompt,cd 到源代碼所在文件夾。注意,command prompt 和cmd是有區別的,不要用cmd,也不要用X64這個配置的。
4、然後在命令行中鍵入:
D:\libjpeg\jpeg-9>nmake -f makefile.vc setup-v10

輸出:
Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.

ren jconfig.vc jconfig.h
ren makejsln.v10 jpeg.sln
ren makeasln.v10 apps.sln
ren makejvcx.v10 jpeg.vcxproj
ren makejfil.v10 jpeg.vcxproj.filters
ren makecvcx.v10 cjpeg.vcxproj
ren makecfil.v10 cjpeg.vcxproj.filters
ren makedvcx.v10 djpeg.vcxproj
ren makedfil.v10 djpeg.vcxproj.filters
ren maketvcx.v10 jpegtran.vcxproj
ren maketfil.v10 jpegtran.vcxproj.filters
ren makervcx.v10 rdjpgcom.vcxproj
ren makerfil.v10 rdjpgcom.vcxproj.filters
ren makewvcx.v10 wrjpgcom.vcxproj
ren makewfil.v10 wrjpgcom.vcxproj.filters

這個命令行是用於創建VS 2010解決方案的,這個命令運行結束,源代碼文件夾里將會生成sln和vcxproj文件的。
5、用vs2010 打開解決方案,build(構建)它即可,隨後將在源代碼的文件夾下生成一個release文件夾,jpeg.lib就在其中
...\..\Release\jpeg.lib
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
在這個過程中注意如果要調整編譯輸出方式為debug需要在configuration中新建Debug編譯方式,同理X64或其他編譯方法也需要配置。
6、注意不要編譯成dll庫,在jpeg的實現中是沒有用導出符號的,函數在其他程序中是無法被識別的,在鏈接是會報錯。
7、使用lib庫,在你的工程里正確配置lib庫的路徑,在屬性對話框的配置欄中linker(鏈接器)的inpu(輸入)中加上jpeg庫的文件名即可。

Ⅲ libjpeg linux程序怎麼編譯

step4:#make #make install 這樣JPEG庫就交叉編譯成功了,相應的庫和頭文件都在/usr/arm/arm-linux/include 和/usr/arm/arm-linux/lib目錄下了 安裝好

Ⅳ 如何編譯新版的libjpeg-turbo 出so文件給Android使用

1、從官網下載最新的libjpeg-turbo源碼
2、解壓縮下載的文件,然後進入,並創建jni文件夾,最後將裡面的文件都拷貝到jni文件中
3、進入jni目錄,然後創建配置文件(例如jconfig.h,config.h),在終端輸入:

[cpp]
./configure --with-jpeg8
./configure --with-jpeg8
就會生成

[cpp]
config.status: creating config.h
config.status: creating jconfig.h
config.status: creating config.h
config.status: creating jconfig.h4、接下來是創建Android.mk文件

[cpp]
# Makefile for libjpeg-turbo

##################################################
### simd ###
##################################################
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS += -D__ARM_HAVE_NEON

# From autoconf-generated Makefile
EXTRA_DIST = simd/nasm_lt.sh simd/jcclrmmx.asm simd/jcclrss2.asm simd/jdclrmmx.asm simd/jdclrss2.asm \
simd/jdmrgmmx.asm simd/jdmrgss2.asm simd/jcclrss2-64.asm simd/jdclrss2-64.asm \
simd/jdmrgss2-64.asm simd/CMakeLists.txt

libsimd_SOURCES_DIST = simd/jsimd_arm_neon.S \
simd/jsimd_arm.c

LOCAL_SRC_FILES := $(libsimd_SOURCES_DIST)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/simd \
$(LOCAL_PATH)/android

AM_CFLAGS := -march=armv7-a -mfpu=neon
AM_CCASFLAGS := -march=armv7-a -mfpu=neon
LOCAL_ARM_MODE=arm
LOCAL_MODULE_TAGS := debug

LOCAL_MODULE := libsimd

include $(BUILD_STATIC_LIBRARY)

Ⅳ ubuntu 安裝libjpeg 具體怎麼配置

下面就介紹這種手工安裝方式的詳細步驟。 一、 安裝編譯程序因為要編譯源代碼,所以第一步就是安裝編譯和構建之類的程序。如果你已經安裝過了,可以跳過此步。在Ubuntu系統中非常簡單,只要執行下面命令就行了: $ sudo apt-get install build-e...

Ⅵ vs2008 怎麼使用 jpeg.lib 庫

libjpeg項目地址:http://libjpeg.sourceforge.net/ ,請點http://www.ijg.org/files/下載jpegsr9a.zip ,並解壓。

因為項目需要用到libjpeg做圖片處理,網上的方法基本上都是nmake /f makefile.vc進行編譯,編譯好的也是針對win32
PC平台可以用的libjpeg,找了找,沒找到怎麼在wince、windows
mobile平台使用VS2008進行編譯的libjpeg,所以自己修改了相關配置文件,可以使用VS2008直接打開,進行編譯,最終生成
libjpeg.dll和libjpeg.lib文件。

使用方法,在你的項目中#pragma comment(lib,"libjpeg.lib") ,#include "jpeglib.h",具體使用方法請參考官方源碼包中自帶的示例代碼。如果需要用在wince
6.0平台上,請更換相應的SDK,重新進行編譯即可。

安裝環境:win7 64bit、VS2008英文版、Windows Mobile 6.5.3 Professional DTK.msi 開發環境。

Ⅶ kali里邊怎麼安裝libjpeg-turbo8這個庫急急急

下載libjpeg-turbo源碼。
安裝編譯依賴包。
$ sudo apt-get install nasm

編譯安裝。
第一步,移動到源文件目錄,並執行autoreconf -fiv 命令。
第二步,運行configure腳本並加上配置參數。我們就直接在源目錄執行,不用創建build目錄了。

不過在運行之前,我們查看一下/usr/local/lib下有沒有libjpeg.so*文件,有的話我們執行操作,刪除這些文件。sudo rm -rf /usr/local/lib/libjpeg.so*否則,直接執行此步即可。
$ ./configure --prefix=/usr/local --mandir=/usr/local/share/man --with-jpeg8 --disable-static --docdir=/usr/local/share/doc/libjpeg-turbo-1.5.2

解釋一下各項參數簡單意思。
–prefix=/usr/local 指定庫安裝路徑
–mandir=/usr/local/share/man 指定man文件(相關命令參考信息)安裝路徑
–with-jpeg8 這個開關啟用與libjpeg 版本8的兼容性,即可使用libjpeg8的API.
–disable-static 阻止安裝靜態版本的庫
–docdir=/usr/local/share/doc/libjpeg-turbo-1.5.2 指定文檔安裝路徑
第三步,編譯及安裝。

$ make$ sudo make install
另外建議看看《Linux就該這么學》這本書熟悉下命令

Ⅷ 在VC里如何用Makefile文件編譯

運行cmd.exe (or command.com in win9x)->進到vc/bin目錄->運行vc-vars32.bat->進到makefile 所在的目錄->nmake /f makefile
從sourceforge上下載下來的libjpeg源代碼中有一個makefile.vc的文件,可以通過nmake /f makefile.vc [nodebug=1]來編譯libjpeg,但是只能編譯靜態庫,如果需要編譯dll以便在emacs等程序中使用的話,需要修改makefile.vc和jmorecfg.h文件。在makefile.vc文件中添加編譯dll規則:
以下內容為程序代碼:
libjpeg.lib: $(LIBOBJECTS) $(RM) libjpeg.lib lib -out:libjpeg.lib $(LIBOBJECTS) #
添加以下這行 libjpeg.dll: $(LIBOBJECTS) $(RM) libjpeg.dll link -dll -out:libjpeg.dll $(LIBOBJECTS) 在jmorecfg.h中添加#define _WIN32_#define JPEG_DLL 然後nmake /f makefile.vc nodebug=1就可以編譯了。
將makefile復制為一個.mak文件,然後用VC打開即可!
.mak 就是一個makefile
可以指定怎樣編譯(命令行,必須先設置VC命令行環境)
vcvars32.bat可設置環境,在vc98/bin下 nmake /f XXXX.mak
如果有一個makefile就只要nmake就可以了。

Ⅸ 如何在windows下編譯Chrome源代碼

一,編譯之前的准備。
1) 了解代碼組織結構。
Chrome source非常龐大,並且在其主目錄下還包含有工具和組件,任何一個工具和組件也附帶有其源代碼。首先得熟悉這些源代碼的組織結構,在http://src.chromium.org/svn/中包含如下子目錄:releases,曾經發布過的chrome源代碼的正式版本;trunk,當前最新的源代碼。由於releases中的代碼比較舊,這里就不做說明了,只說明trunk的結構。在trunk下面有3個重要的目錄,deps包含了chrome編譯和運行所需要的全部組件的代碼。src裡麵包含的則是chrome的主程序的代碼,tools包含的是下載和配置編譯所需要的第三方工具的壓縮包和源代碼,其中就有svn和python這2個比較重要的工具,後面再詳細介紹。暫時做這樣一個簡單的介紹,因為其組織結構比較負責,以後再作補充斧正。

2)如何下載和同步源代碼。
首先談談下載:
1,最簡單的方法是從chrome官網上直接下載源代碼壓縮包,地址是http://build.chromium.org/buildbot/archives/chromium_tarball.html。

2,或者採用svn從http://src.chromium.org/svn/trunk/src這個地方heckout,這要求你先在本地建一個源代碼的主目錄。

3,另外一個辦法則是採用google提供的一個部署工具depot_tools。雖然這幾種辦法都可下載完整的源代碼,但目前的情況是:chrome基於Visual Stdio 2005 進行編譯,如果順利完成編譯工作,自然少不了sln文件,較早的源代碼中包含有現成的sln和vcproject文件,但後來做了修改,這些文件被拋棄掉,Google自己開發了一種腳本工具叫做GYP,這個工具採用python編寫,GYP採用了自定義的一套規則,用於生成各種工程文件。而關鍵的python則包含於depot_tools中,因此不論採用什麼方法下載的代碼,都得下載depot_tools這個工具,以獲得必須的工程文件。
depot_tools位於 http://src.chromium.org/svn/trunk/tools 下面,包括一個目錄和一個zip格式的壓縮包。

3)關於編譯器
前面提到Chrome採用Visual Stdio 2005進行編譯,根據http://dev.chromium.org的說明,需進行如下操作正常編譯
a, 安裝Visual Studio 2005.
b, 安裝Visual Studio 2005 Service Packe 1.
c, 安裝Visual Studio Hotfix 947315.
d, 如果是vista系統,還需安裝Visual Studio 2005 Service Packe 1 Update for Windows Vista.
e, 安裝Windows 2008 SDK,如果是Visual Studio 2008則不需要這一步。
f, 配置Windows 2008 SDK,使2008 SDK成為首選開發庫,以獲得一些新功能和特性。辦法是在開始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool,選擇make current按鈕。也可以在VS裡面手動配置include和libary路徑,效果是一樣的。

二,如何配置工程文件
1,如果是採用depot_tools,那麼從代碼下載到生成sln文件會自動完成。其步驟是
(1)下載depot_tools到本地存儲,假設位於d:/depot_tools.
(2)將d:/depot_tools添加到系統環境變數中。
(3)創建一個源代碼根目錄,假設為 d:/chrome,目錄不得包含空格。
(4)在命令行下切換當前目錄到d:/chrome。
(5)執行命令 gclient config http://src.chromium.org/svn/trunk/src ,該命令會首先下載svn和python分別到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。
(6)執行命令 gclient sync 這個命令會調用svn同步源代碼。這個過程會比較漫長。全部完成之後全部源代碼就保存在d:/chrome裡面。未編譯的代碼大約有4個G左右,過程將十分漫長。這樣獲得的源代碼已經包含所有的工程文件,可直接打開。

重點說明一下gclient,它實際上是一個批處理文件,它主要做了如下一些事情,首先設置環境變數,如代碼根目錄,工具根目錄等。其次調用win_tools.bat從伺服器下載svn和python。最後調用python.exe對Chrome.gyp進行解析生成所有工程文件。
另外需要說明的是,gclient sync的過程非常漫長,根據命令行的提示來看總共需要同步67個項目(不是工程),期間可能會因為一些原因導致錯誤而退出這個過程,需要繼續調用sync。比如網路出現故障svn會多次進入sleep狀態然後重試,如果多次失敗就會報錯退出,還有的情況是某些子目錄的屬性問題無法同步,可根據提示進行操作。還有個目前新出現的問題,下面2個目錄「src/webkit/data/layout_tests/LayoutTests」和「src/third_party/WebKit/LayoutTests」的源代碼是從src.webkit.org簽出來的,但是這個網站目前存在問題無法簽出代碼, 需要屏蔽掉這2個目錄,由於裡面是測試代碼,即使丟棄也不會影響整個工程的編譯,方法是打開trunk下面的.gclient文件,向裡面添加如下內容
"custom_deps" : {
"src/webkit/data/layout_tests/LayoutTests":None,
"src/third_party/WebKit/LayoutTests":None,
},

這樣svn就能完成代碼的同步了。最後gclient會調用depot_tools/python_bin/python.exe 對 src/build/gyp_
chromium進行處理,這樣就得到了所有的sln和vcproject文件。

2,如果是下載的代碼壓縮包或者checkout的代碼,代碼目錄裡面沒有sln文件,這個時候需要調用命令行進入源代碼根目錄,然後執行命令 gclient runhooks --force,命令執行後會直接對Chrome.gyp進行解析,生成sln文件。

在實際下載過程中,最開始的時候我用TortoiseSVN從http://src.chromium.org/svn/trunk/src checkout源代碼,但是得到的代碼只有幾百兆,執行gclient runhooks --force命令後也沒有找到sln文件,具體原因未知,不建議使用此方式。而直接下載代碼壓縮包的方式沒有嘗試過,不知道是否可行。因此最穩妥的方法還是使用depot_tools來部署和處理源代碼。

三 編譯工程
啟動Visual Studio 2005打開 src/chrome/browser/chrome.sln,或者打開src/build/all.sln,如果打開的是chrome.sln裡麵包含480個工程,而all.sln則包含507個工程,一些09年的編譯說明提到有300左右的工程,可見chrome的代碼變動比較大。對整個解決方案進行編譯,打開需要2個小時才能完成編譯,視硬體環境而定,內存越大越快,推薦4G以上內存,酷睿2核或者4核。編譯完成以後據說會佔用30G的空間。編譯後的文件位於 d:/chorme/chrome/debug 目錄或者 d:/chorme/chrome/release目錄下。

四 chrome涉及的開源項目

Chrome 採用了很多開源項目,這里把它們列出來以備後用,目前Chrome涉及25個開源代碼:
1、Google Breakpad
/src/breakpad
開源的跨開台程序崩潰報告系統。
2、Google URL
/src/googleurl
Google小巧的URL解析整理庫。
3、Skia
/src/skia
矢量圖引擎。
4、Google v8
/src/v8
Google開源的JavaScript引擎。V8實現了ECMA-262第三版的ECMAScript規范,可運行於Windows XP 和 Vista, Mac OS X 10.5 (Leopard), 及 Linux等基於IA-32 或 ARM 的系統之上。V8可單獨運行也可嵌入到任何C++程序中。
5、Webkit
/src/webki
開源的瀏覽器引擎
6、Netscape Portable Runtime (NSPR)
/src/base/third_party/nspr
Netscape Portable Runtime (NSPR) 提供了系統級平台無關的API及類似libc的函數。
7、Network Security Services (NSS)
/src/base/third_party/nss
Network Security Services (NSS) 一套用於支持伺服器端與客戶端安全開發的跨平台函數庫。程序通過NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 認證及其它一些安全標准。
8、Hunspell
/src/chrome/third_party/hunspell
Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding.
9、Windows Template Library
/src/chrome/third_party/wtl
用於開發Windows程序與UI組件的C++ library。WTL擴展了ATL (Active Template Library) 並提供一套用於controls, dialogs, frame windows, GDI objects等開發的類。
10、Google C++ Testing Framework
/src/testing/gtest
Google用於編寫C++測試的基於xUnit架構的框架,可用於多種平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自動測試發現,有一套豐富的Assertions斷言,用於可自定義斷言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation.
11、bsdiff 與 bspatch
/src/third_party/bsdiff 及 /src/third_party/bspatch
bsdiff 與 bspatch 用於為二進制文件生成補丁。
12、bzip2
/src/third_party/bzip2
bzip2使用Burrows-Wheeler block sorting text compression 演算法與Huffman編碼壓縮文件。
13、International Components for Unicode (ICU)
/src/third_party/icu38
ICU是一套成熟並被廣泛使用的C/C++ 及 Java 庫,可為軟體提供Unicode與全球化支持。
14、libjpeg
/src/third_party/libjpeg
用於處理JPEG (JFIF)圖像格式的庫。
15、libpng
/src/third_party/libpng
PNG圖像格式庫。支持絕大部分的PNG特性,可擴展。已經被廣泛地使用了13年以上了。
16、libxml
/src/third_party/libxml
c語言的XML解析庫。
17、libxslt
/src/third_party/libxslt
C語言的XSLT庫。
18、LZMA
/src/third_party/lzma_sdk
LZMA為7-Zip軟體中7z格式壓縮所使用的壓縮演算法,有很好的壓縮效果。
19、stringencoders
/src/third_party/modp_b64
一系列高性能的c-string轉換函數,比如:base 64 encoding/decoding。通常比其標准實現快兩倍以上。
20、Netscape Plugin Application Programming Interface (NPAPI)
/src/third_party/npapi
多種瀏覽器使用的跨平台插件架構。
21、Pthreads-w32
/src/third_party/pthread
用於編寫多線程程序的API
22、SCons - a software construction tool
/src/third_party/scons
開源的軟體構建工具——下一代的編譯工具。可以認為SCons是改進過的跨平台配上autoconf/automake與ccache的Make工具的子系統。
23、sqlite
/src/third_party/sqlite
大名鼎鼎的嵌入式資料庫引擎。自管理、零配置、無需伺服器、支持事務。
24、TLS Lite
/src/third_party/tlslite
SSL 3.0, TLS 1.0, and TLS 1.1的Python免費實現庫。TLS Lite支持這些安全驗證方式:SRP, shared keys, and cryptoIDs in addition to X.509 certificates。註:Chrome並不包涵Python。TLS Lite用於Chrome開發過程中的代碼覆蓋、依賴檢查、網頁載入時間測試及生成html結果比較等。
25、zlib
/src/third_party/zlib
zlib為一套用於任意平台與機器的無損數據壓縮的庫,它免費、自由、無任何法律專利問題。

Ⅹ 如何使用libjpeg

本文只介紹jpeg壓縮的相關內容,剛開始我貪圖省事,採用微 軟 的GDI Plus提供的功能,很是方便,先獲取jpg圖像的編碼,然後根據圖像的點陣圖數據創建一個Bitmap類的對象,再保存圖像為jpg格式就行了。但是我對 GDI+還是很信任,總感覺不踏實(沒有理由的),我們的系統一旦安裝就要長期運行,我就是擔心長期運行一段時間後GDI+會出問題,結果也證實了我的擔 心,我們實際使用的10套系統中有一套,連續運行3-5天後,GDI+就會崩潰,於是我決心採用IJG JPEG Library。您可以到
站下載libjpeg的源碼, IJG JPEG Library就是jpeg壓縮庫,是以源碼的形式提供給軟體開發人員的,當然在軟體包里也有編譯好的庫文件,我們這里就只用到其中的 libjpeg.lib,jconfig.h,jmorecfg.h,jpeglib.h這幾個文件,下面我就介紹一下怎樣在自己的程序里嵌入圖像壓縮功 能。
一、建立編譯環境
所謂建立編譯環境,其實非常簡單,就是把上面提到的4個文件拷 貝到你的項目文件夾下,把libjpeg.lib添加到你的項目中,然後在你完成壓縮功能的那個文件里加入#include "jpeglib.h",需要注意的是,libjpeg.lib是用c語言開發的,如果要用在你的C++程序里,需要用到extern "C",如下:
// TestLibjpeg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "memory.h"
extern "C" {
#include "jpeglib.h"
}
二、壓縮步驟
1、申請並初始化jpeg壓縮對象,同時要指定錯誤處理器
struct jpeg_compress_struct jcs;
// 聲明錯誤處理器,並賦值給jcs.err域
struct jpeg_error_mgr jem;
jcs.err = jpeg_std_error(&jem);
jpeg_create_compress(&jcs);
2、指定壓縮後的圖像所存放的目標文件,注意,目標文件應以二進制模式打開
f=fopen("03.jpg","wb");
if (f==NULL)
{
delete [] data;
delete [] pDataConv;
return 0;
}
jpeg_stdio_dest(&jcs, f);
3、設置壓縮參數,主要參數有圖像寬、高、色彩通道數(1:索引圖像,3:其他),色彩空間(JCS_GRAYSCALE表示灰度圖,JCS_RGB表示彩色圖像),壓縮質量等,如下:
jcs.image_width = nWidth; // 為圖的寬和高,單位為像素
jcs.image_height = nHeight;
jcs.input_components = 1; // 在此為1,表示灰度圖, 如果是彩色點陣圖,則為3
jcs.in_color_space = JCS_GRAYSCALE; //JCS_GRAYSCALE表示灰度圖,JCS_RGB表示彩色圖像
jpeg_set_defaults(&jcs);
jpeg_set_quality (&jcs, 80, true);
需要注意的是,jpeg_set_defaults函數一定要等設 置好圖像寬、高、色彩通道數計色彩空間四個參數後才能調用,因為這個函數要用到這四個值,調用jpeg_set_defaults函數後,jpeglib 庫採用默認的設置對圖像進行壓縮,如果需要改變設置,如壓縮質量,調用這個函數後,可以調用其它設置函數,如jpeg_set_quality函數。其實 圖像壓縮時有好多參數可以設置,但大部分我們都用不著設置,只需調用jpeg_set_defaults函數值為默認值即可。
4、上面的工作準備完成後,就可以壓縮了,壓縮過程非常簡單, 首先調用jpeg_start_compress,然後可以對每一行進行壓縮,也可以對若干行進行壓縮,甚至可以對整個的圖像進行一次壓縮,壓縮完成後, 記得要調用jpeg_finish_compress函數,如下:
jpeg_start_compress(&jcs, TRUE);
JSAMPROW row_pointer[1]; // 一行點陣圖
int row_stride; // 每一行的位元組數
row_stride = jcs.image_width; // 如果不是索引圖,此處需要乘以3
// 對每一行進行壓縮
while (jcs.next_scanline < jcs.image_height) {
row_pointer[0] = & pDataConv[jcs.next_scanline * row_stride];
jpeg_write_scanlines(&jcs, row_pointer, 1);
}
jpeg_finish_compress(&jcs);
5、最後就是釋放壓縮工作過程中所申請的資源了,主要就是jpeg壓縮對象,由於在本例中我是直接用的局部變數,所以只需調用jpeg_destroy_compress這個函數即可,如下:
jpeg_destroy_compress(&jcs);
三、解壓縮步驟
解壓縮步驟與壓縮步驟非常相似,只是解壓縮對象為jpeg_decompress_struct類型,步驟如下:
1、聲明並初始化解壓縮對象,同時制定錯誤信息管理器
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
2、打開jpg圖像文件,並指定為解壓縮對象的源文件
FILE *f = fopen(strSourceFileName,"rb");
if (f==NULL)
{
printf("Open file error!\n");
return;
}
//
jpeg_stdio_src(&cinfo, f);
3、讀取圖像信息
jpeg_read_header(&cinfo, TRUE);
4、根據圖像信息申請一個圖像緩沖區
data = new BYTE cinfo.image_width*cinfo.image_height*cinfo.num_components];
5、開始解壓縮
jpeg_start_decompress(&cinfo);
JSAMPROW row_pointer[1];
while (cinfo.output_scanline < cinfo.output_height)
{
row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline-1)*cinfo.image_width*cinfo.num_components];
jpeg_read_scanlines(&cinfo,row_pointer ,
1);
}
jpeg_finish_decompress(&cinfo);
6、釋放資源
jpeg_destroy_decompress(&cinfo);
fclose(f);
好了,利用IJG JPEG Library進行圖像壓縮就介紹到這里,希望對大家有所幫助,實例代碼已經實現了圖像的壓縮和解壓縮的全部功能,命令格式 為:「TestLibjpeg.exe j|j24|b 源文件名 目標文件名」,其中,j選項將源文件壓縮為jpg格式,不改變色彩模式,j24選項將源文件壓縮為24為jpg格式,b選項將源文件解壓縮為bmp格式, 該實例並沒有提供文件有效性的驗證,如果要引入自己的代碼,請自己實現文件有效性的驗證。

熱點內容
winxp無法訪問 發布:2025-05-19 15:19:48 瀏覽:945
文件預編譯 發布:2025-05-19 15:14:04 瀏覽:641
怎麼在伺服器上掛公網 發布:2025-05-19 15:14:02 瀏覽:270
濟南平安e通如何找回密碼 發布:2025-05-19 14:56:58 瀏覽:175
安卓手機如何找到iccid碼 發布:2025-05-19 14:46:51 瀏覽:226
編譯的內核為什麼那麼大 發布:2025-05-19 14:45:21 瀏覽:178
什麼控制壓縮 發布:2025-05-19 14:28:13 瀏覽:930
網路伺服器忙指什麼 發布:2025-05-19 14:28:10 瀏覽:188
伺服器有外網ip 發布:2025-05-19 14:02:02 瀏覽:833
電腦上c語言編程軟體 發布:2025-05-19 13:55:17 瀏覽:125