當前位置:編程學習大全網 - 編程語言 - jpg,gif,jpeg,PNG png,bmp這些格式分別是什麽意思?

jpg,gif,jpeg,PNG png,bmp這些格式分別是什麽意思?

JPG格式是最常用的圖像文件格式,由軟件開發協會制定。它是壹種有損壓縮格式,可以在很小的存儲空間內壓縮圖像,圖像中重復或不重要的數據會丟失,容易造成圖像數據的損壞。特別是如果壓縮比過高,最終解壓縮後的恢復圖像質量會明顯下降。

如果追求高質量的圖像,就不要用太高的壓縮比。

不過JPEG壓縮技術很先進。它利用有損壓縮去除多余的圖像數據,可以同時顯示非常豐富生動的圖像,換句話說,可以用最少的磁盤空間獲得更好的圖像質量。

而且JPEG是壹種非常靈活的格式,具有調整圖像質量的功能,允許文件以不同的壓縮比壓縮,支持多種壓縮級別。壓縮比通常在10: 1到40: 1之間,壓縮比越高質量越低。相反,壓縮比越小,質量越好。比如1.37Mb的BMP位圖文件可以壓縮到20.3KB,當然妳也可以在畫質和文件大小之間找到壹個平衡點。

JPEG格式主要壓縮高頻信息,很好地保留了顏色信息。適用於互聯網,可以減少圖像傳輸時間,可以支持24位真彩色,也廣泛應用於需要連續色調的圖像。

GIF是壹種標準格式,用於壓縮顏色單調、細節清晰的圖像,如線形圖、徽標或帶文本的插圖。

GIF分為靜態GIF和動畫GIF,支持透明背景圖片,適用於各種操作系統。“體型”很小,網上很多小動畫都是GIF格式的。其實GIF就是把多張圖片保存為壹個圖片文件形成動畫,所以說到底GIF還是壹種圖片文件格式。但是GIF只能顯示256色。

GIF主要分為兩個版本,分別是GIF 89a和GIF 87a:

GIF 87a:制作於1987。

GIF 89a:是1989制作的版本。在該版本中,GIF文檔擴展了圖形控制塊、備註、描述和應用編程接口四個塊,並提供了對透明色和多幀動畫的支持。

GIF格式是CompuServe公司在1987推出的。GIF格式因為體積小,圖像相對清晰,特別適合最初網速較慢的情況,此後壹直很受歡迎。它采用無損壓縮技術,只要圖像不超過256色,既能減小文件大小,又能保持圖像質量。(當然也有壹些hack技術在壹定條件下克服了256色的限制。詳見真彩。)但是256色的限制大大限制了GIF文件的應用範圍,比如彩色相機。(當然,采用無損壓縮技術的彩色相機照片並不適合通過網絡傳輸。另壹方面,JPG格式在高色彩圖片上具有良好的性能,但在簡單的折線上效果不佳。所以GIF格式壹般適用於圖表、按鈕等只需要少數幾種顏色的圖像(比如黑白照片)。

PNG是20世紀90年代中期開發的圖像文件存儲格式。其目的是取代GIF和TIFF文件格式,增加壹些GIF文件格式不具備的功能。可移植網絡圖形格式(PNG)的名稱來自非官方的“PNG's Not GIF”,這是壹種位圖文件存儲格式,發音為“ping”。當用PNG存儲灰度圖像時,灰度圖像的深度可多達16位,存儲彩色圖像時,彩色圖像的深度可多達48位,α通道數據也可存儲多達16位。PNG使用源自LZ77的無損數據壓縮算法。

PNG圖像文件因為壓縮比高,文件小,壹般用在JAVA程序,或者網頁或者S60程序中。

使用顏色查找表或調色板可以支持256色的彩色圖像。

流暢性讀/寫性能:圖像文件格式允許連續讀寫圖像數據,非常適合在通信過程中生成和顯示圖像。

漸進顯示:該功能可以在通信鏈路上傳輸圖像文件的同時,在終端上顯示圖像,在顯示圖像的整體輪廓後,逐漸顯示圖像的細節,即先顯示低分辨率的圖像,然後逐漸提高其分辨率。

透明度:這種能力可以使圖像的某些部分不顯示,它可以用來創建壹些獨特的圖像。

輔助信息:此功能可用於在圖像文件中存儲壹些文本註釋信息。

獨立於計算機軟硬件環境。

使用無損壓縮。

在PNG文件格式中,應該添加以下在GIF文件格式中不可用的功能:

每個像素是48位真彩色圖像。

每個像素是16位的灰度圖像。

您可以為灰度和真彩色貼圖添加alpha通道。

添加圖像的伽瑪信息。

使用循環冗余碼(CRC)來檢測損壞的文件。

加快圖像顯示的逐次逼近顯示模式。

標準讀/寫工具包。

多個圖像可以存儲在壹個文件中。

BMP是壹種獨立於硬件設備的圖像文件格式,應用廣泛。它采用位圖存儲格式,除了圖像深度之外不使用任何其他壓縮,所以BMP文件占用空間很大。BMP文件的圖像深度可以選擇lbit、4bit、8bit和24bit。當在BMP文件中存儲數據時,從左到右和從下到上掃描圖像。

因為BMP文件格式是Windows環境下交換與圖紙相關的數據的標準,所以所有運行在Windows環境下的圖形圖像軟件都支持BMP圖像格式。

典型的BMP圖像文件由四部分組成:

1:位圖文件頭數據結構,包含BMP圖像文件的類型、顯示內容等信息;

2.位圖信息數據結構,包含BMP圖像的寬度、高度、壓縮方式、定義顏色等信息;

3:調色板,這部分是可選的,有些位圖需要調色板,有些位圖如真彩色貼圖(24位BMP)不需要調色板;

4.位圖數據。該部分的內容根據BMP位圖中使用的位數而有所不同。RGB直接用於24位位圖,而其他小於24位的位圖則使用調色板中的顏色索引值。

位圖類型:

有兩種類型的位圖,即設備相關位圖(DDB)和設備無關位圖(DIB)。DDB位圖在早期的Windows系統(Windows 3.0之前)中非常常見,事實上它是唯壹的。然而,隨著顯示器制造技術的發展和顯示設備的多樣化,DDB位圖的壹些固有問題開始顯現出來。例如,它無法存儲(或獲取)創建此圖片的原始設備的分辨率,因此應用程序無法快速判斷客戶端的顯示設備是否適合顯示此圖片。為了解決這個問題,微軟創造了DIB位圖格式。

設備無關位圖

DIB位圖包含以下顏色和大小信息:

*原始設備(即創建圖片的設備)的顏色格式。

*原始設備的分辨率。

*原始設備的調色板

*壹個位數組,用紅、綠、藍(RGB)三個值表示壹個像素。

*指示數據壓縮方案的數組壓縮標誌(如果需要)。

以上信息存儲在BITMAPINFO結構中,該結構由BITMAPINFOHEADER結構和兩個或多個RGBQUAD結構組成。BITMAPINFOHEADER結構包含指示圖像大小、原始設備的顏色格式和數據壓縮方案的成員。RGBQUAD結構標識像素使用的顏色數據。

DIB位圖也有兩種形式,即自底向上的DIB(自底向上)和自頂向下的DIB(自頂向下)。自下而上DIB的原點在圖像的左下角,而自上而下DIB的原點在圖像的左上角。如果DIB的高度值(由BITMAPINFOHEADER結構中的biHeight成員標識)為正值,則表示此DIB為自底向上的DIB,如果高度值為負值,則為自頂向下的DIB。註意:自頂向下的DIB位圖不能壓縮。

位圖的顏色格式由顏色平面值和顏色位計數計算得出,顏色平面值總是1,顏色位值可以是1,4,8,16,24,32中的壹個。如果是1,說明位圖是單色位圖。如果是4,說明是VGA位圖。如果是8,16,24或者32,說明是其他設備生成的位圖。如果應用程序希望獲得當前顯示設備(或打印機)的顏色位值(或位深度),它可以調用API函數GetDeviceCaps()並將第二個參數設置為BITSPIXEL。

顯示設備的分辨率用每米多少像素來表示。應用程序可以通過以下三個步驟獲得顯示設備或打印機的水平分辨率:

1.調用GetDeviceCaps()函數並將第二個參數指定為HORZRES。

2.再次調用GetDeviceCaps()函數,並將第二個參數指定為HORZSIZE。

3.將第壹個返回值除以第二個返回值。即:detdevicecaps (HDC,Horzres)/getdevicecaps (HDC,Horzsize);

應用程序也可以使用相同的三個步驟來獲得設備的垂直分辨率,但唯壹的區別是將HORZRES替換為VERTRES,將HORZSIZE替換為VERTSIZE。

調色板存儲在RGBQUAD結構的數組中,表示每種顏色的紅、綠、藍分量值。位數組中的每個索引對應壹個調色板項(即壹個RGBQUAD結構),應用程序會根據這個對應關系將像素索引值轉換為像素RGB值(真實像素顏色)。應用程序還可以通過調用GetDeviceCaps()函數來獲取當前顯示設備的調色板大小(只需將該函數的第二個參數設置為NUMCOLORS)。

Win32 API支持位數據壓縮(僅適用於8位和4位自下而上的DIB位圖)。壓縮方法是遊程編碼方案(RLE)。RLE用兩個字節來描述壹種語法。第壹個字節表示重復像素的數量,第二個字節表示重復像素的索引值。有關壓縮位圖的更多信息,請參見BITMAPINFOHEADER結構的說明。

通過在調用GetDIBits()函數之前初始化壹些必要的結構,應用程序可以從DDB位圖創建DIB位圖。但是,某些顯示設備可能不支持此功能。可以通過調用GetDeviceCaps()函數來確定(GetDeviceCaps()函數在調用時將RC_DI_BITMAP指定為RASTERCAPS的標誌)。

通過調用SetDIBitsToDevice()函數或StretchDIBits()函數,應用程序可以使用DIB在顯示設備上設置像素。同樣,某些顯示設備可能不支持上述兩種功能。在這種情況下,可以將RC_DIBTODEV指定為RASTERCAPS標誌,然後調用GetDeviceCaps()函數來確定設備是否支持SetDIBitsToDevice()函數。還可以通過將RC_STRETCHDIB指定為RASTERCAPS標誌來調用GetDeviceCaps()函數,以確定設備是否支持StretchDIBits()函數。

如果應用程序只是想顯示壹個現有的DIB位圖,那麽它只需要調用SetDIBitsToDevice()函數。例如,電子表格軟件可以打開壹個圖表文件,只需在窗口中調用SetDIBitsToDevice()函數,即可在窗口中顯示圖表。但是如果應用程序要重復繪制位圖,就應該使用BitBlt()函數,因為BitBlt()函數的執行速度要比SetDIBitsToDevice()函數快得多。

設備相關位圖

系統仍然支持設備相關位圖(DDB)的原因只是為了兼容舊的Windows 3.0軟件。如果程序員現在想開發壹個和位圖相關的程序,應該盡量使用或者生成DIB格式的位圖。

DDB位圖由單壹結構位圖描述,該結構的成員指示位圖的寬度、高度和顏色格式。

還有兩種類型的DDB位圖,即可丟棄的DDB和不可丟棄的DDB。可丟棄的DDB位圖是壹種位圖,當系統內存不足並且該位圖沒有被選入設備描述表(DC)時,該位圖將被從內存中清除(即被丟棄)。非消耗性DDB是壹種DDB,無論系統有多少內存,它都不會被系統清除。API函數CreateDiscardableBitmap()可用於創建可丟棄的位圖。CreateBitmap()、CreateCompatibleBitmap()和CreateBitmapIndirect()函數可用於創建無法丟棄的位圖。

通過初始化壹些必要的結構,然後調用CreateDIBitmap()函數,應用程序可以從DIB位圖創建DDB位圖。如果在調用這個函數時指定了CBM_INIT標誌,那麽這個調用就相當於調用CreateCompatibleBitmap()來創建當前設備格式的DDB位圖,然後調用SetDIBits()函數將DIB格式轉換為DDB格式。(可能有些設備不支持SetDIBits()函數。可以指定RC_DI_BITMAP作為RASTERCAPS的標誌,然後調用GetDeviceCaps()函數進行判斷)。

相應的數據結構:

1: BMP文件合成

BMP文件由四部分組成:文件頭、位圖頭、顏色信息和圖形數據。

2: BMP文件頭(14字節)

BMP文件頭的數據結構包含了BMP文件的類型、文件大小、位圖起始位置等信息。

其結構定義如下:

typedef結構tagBITMAPFILEHEADER

{

WORDbf類型;//位圖文件的類型必須是BM(0-1字節)。

DWORD bfSize//位圖文件的大小,以字節為單位(2-5字節)

WORD bfreserved 1;//位圖文件保留字,必須是0(6-7字節)。

WORD bfReserved2//位圖文件保留字,必須為0(8-9字節)

DWORD bfOffBits//位圖數據的起始位置,相對於位圖(10-13字節)

//文件頭的偏移量用字節表示。

} BITMAPFILEHEADER

3:位圖標題(40字節)

BMP位圖信息的頭數據用於解釋位圖的大小和其他信息。

typedef struct tagBITMAPINFOHEADER {

DWORD biSize//此結構占用的字節數(14-17字節)

長雙寬;//位圖的寬度,以像素為單位(18-21字節)

龍比高;//位圖的高度,以像素為單位(22-25字節)

WORD雙翼機;//目標設備的級別必須是1(26-27字節)。

單詞biBitCount//每個像素需要的位數必須是1(兩種顏色),(28-29字節)。

// 4(16色)、8(256色)或24(真彩色)

雙字壓縮;//位圖壓縮類型,必須是0(不壓縮),(30-33字節)。

// 1(BI_RLE8壓縮類型)或2(BI_RLE4壓縮類型)

DWORD biSizeImage//位圖的大小,以字節為單位(34-37字節)

長biXPelsPerMeter//位圖的水平分辨率,每米像素(38-41字節)

長雙骨盆測量儀;//位圖的垂直分辨率,每米像素(42-45字節)

DWORD biClrUsed//位圖實際使用的顏色表中的顏色數(46-49字節)

DWORD biClrImportant//位圖顯示中重要顏色的數量(50-53字節)

} BITMAPINFOHEADER

4:顏色表

顏色表用於描述位圖中的顏色。它有幾個表條目,每個條目都是RGBQUAD類型的結構,並定義了壹種顏色。RGBQUAD結構的定義如下:

typedef struct tagRGBQUAD {

字節rgbBlue//藍色的亮度(取值範圍為0-255)

字節rgbGreen//綠色的亮度(取值範圍為0-255)

字節rgbRed//紅色的亮度(取值範圍為0-255)

字節rgbReserved//保留,必須為0。

} RGBQUAD

顏色表中RGBQUAD結構數據的數量由biBitCount決定:

當bibit count = 1,4,8時,分別有216256個條目;

當biBitCount=24時,沒有顏色表條目。

位圖頭和顏色表構成位圖信息,BITMAPINFO結構定義如下:

typedef結構tagBITMAPINFO {

BITMAPINFOHEADER bmiHeader//位圖標題

RGBQUAD BMI colors[1];//顏色表

} BITMAPINFO

5:位圖數據

位圖數據記錄位圖的每壹個像素值,記錄順序是掃描行內從左到右,掃描行間從下到上。位圖的壹個像素值占用的字節數:

當biBitCount=1時,8個像素占1個字節;

當biBitCount=4時,兩個像素占1字節;

當biBitCount=8時,1像素占1字節;

當biBitCount=24時,1像素占3個字節;

Windows規定壹條掃描線占用的字節數必須是

4的倍數(即在long中),不足的用0填充。

bisize image =((((bi . bi width * bi . bibitcount)+31)& amp;~ 31)/8)* bi . BIH height;

具體數據示例:

例如,在BMP文件的開頭:

4d 42 4690 0000 0000 0000 4600 0000 2800 0000 0000 9000 0000 0000 01000 0300 0000 0000 0090 0000 000 000 a0f 000 0000 000 000 000 000 a000 000 000 000 00 000 00 000 000 00 000 000 00 000 00 000 00 00 000 00 00 000 00 00 00 00 00........

BMP文件可以分為位圖文件頭、位圖信息頭、色板和圖像數據數組四個部分,在上圖中用*隔開。

第壹,圖像文件頭

1)1:(此處數字代表“字”,即兩個字節,下同)圖像文件頭。0x4D42='BM ',表示Windows支持的BMP格式。

2)2-3:總文件大小。4690 0000,00009046h=36934。

3)4-5:保留,必須設置為0。

4)6-7:文件和位圖數據之間的偏移量。4600 0000就是00000046h=70,上面的文件頭是35個字=70個字節。

二、位圖頭

5)8-9位圖圖報頭長度。

6)10-11:位圖寬度,以像素為單位。8000 0000 000080h = 128。

7)12-13:位圖高度,以像素為單位。900000000,0000090h = 144。

8)14:位圖的個數,總是1。0100,0001h=1。

9)15:每個像素的位數。有1(單色)、4(16彩色)、8(256彩色)、16(64K彩色、高彩色)、24(16M彩色、真彩色)、32(4096M彩色、增強真彩色)。1000就是0010h=16。

10)16-17:壓縮描述:有0(不壓縮),1(RLE 8,8位RLE壓縮),2(RLE 4,4位RLE壓縮),3(位域,位域存儲)。RLE簡單地采用像素數+像素值的方法進行壓縮。T408采用位域存儲方式,兩個字節代表壹個像素,位域分配為r5b6g5。圖中的0300 0000就是0000003h=3。

11)18-19:以字節表示的位圖數據的大小,必須是4的倍數,數值上等於(≥4位圖寬度的最小倍數)×位圖高度×每像素位數。0090 0000就是0009000h = 80× 90× 2h = 36864。

12)20-21:以像素/米為單位的水平分辨率。A00F 0000就是0000 0FA0h=4000。

13)22-23:以像素/米為單位的垂直分辨率。A00F 0000就是0000 0FA0h=4000。

14)24-25:位圖中使用的顏色索引數。如果設置為0,則使用所有調色板項目。

15)26-27:對圖像顯示有重要影響的顏色指數個數。如果是0,說明壹切都很重要。

第三,色板

16)28- ...(不確定):色板規範。對於調色板中的每個條目,按以下方式描述RGB值:

藍色分量為1字節。

綠色分量為1字節。

紅色分量為1字節。

1字節用於填充(設置為0)。

對於24位真彩色圖像,不使用色板,因為位圖中的RGB值代表每個像素的顏色。

例如,色板是00f 8 0000 e 0070001f 00 000000000000,其中:

00FB 0000就是fb00h = 1111100000000(二進制),是藍色分量的掩碼。

E007 0000是07e0h = 0000111111100000(二進制),是綠色分量的掩碼。

1F00 0000是001fh = 00000000011111(二進制),是紅色分量的掩碼。

000000000總設置為0。

對掩模和像素值進行and運算,然後執行移位運算,從而可以獲得每種顏色的分量值。看壹下掩碼就能明白,其實在每個像素值的16位的兩個字節中,從高到低取5、6、5位分別是R、G、B分量值。取出分量值後,將R、G、B的值分別乘以8、4、8,將第壹個分量完成為壹個字節,然後將這三個字節按照rgb組合放入內存(也是逆序)轉換為24位標準BMP格式。

第四,圖像數據陣列

17)27(不帶調色板)-...:每兩個字節代表壹個像素。數組中的第壹個字節表示位圖左下角的像素,最後壹個字節表示位圖右上角的像素。

五、存儲算法

BMP文件通常是未壓縮的,所以通常比相同圖像的壓縮圖像文件格式要大得多。例如,24位800×600幾乎占用1.4MB的空間。因此,它們通常不適合在互聯網或其他低速或容量有限的介質上傳輸。根據色深的不同,圖像上的壹個像素可以用壹個或多個字節來表示,具體由n/8決定(n為位深,1字節包含8個數據位)。圖片瀏覽器等根據字節的ASCII值計算像素的顏色,然後從調色板中讀取相應的值。有關更多詳細信息,請參考以下關於位圖文件的部分。壹個N位2n色的位圖大概的字節數可以用下面的公式計算:BMP文件的大小大概等於54+4*2的N +(w*h*n)/8的次方。

,其中高度和寬度是像素。需要註意的是,上面公式中的54是位圖文件的文件頭,也是調色板的大小。另外,需要註意的是,這是壹個近似值。對於n位位圖圖像,雖然最多可能有2n種顏色,但特定圖像可能不會使用所有這些顏色。由於調色板僅定義圖像中使用的顏色,實際調色板將小於。如果妳想知道這些值是如何獲得的,請參考下面的文件格式部分。由於存儲算法本身決定的因素,根據圖像參數的不同,計算的大小和實際的文件大小會有壹些細微的差別。

  • 上一篇:為什麽有人說真的懂電腦的人反而不會選蘋果?
  • 下一篇:博世ESP系統組成構造與工作原理介紹
  • copyright 2024編程學習大全網