• /  23
  • 下載費用: 19.9積分  

位圖文件格式淺析和圖形顏色轉換.ppt

'位圖文件格式淺析和圖形顏色轉換.ppt'
位圖文件格式淺析和圖形顏色轉換Prepared by JettyDate:2005.1.14SW DepartmentPCEG LDCAgendaBMP圖象文件格式分析真彩色BMP圖象到256色BMP的轉換真彩色BMP圖象到16色BMP的轉換BMP是bitmap的縮寫形式,bitmap顧名思義,就是位圖也即Windows位圖。它一般由4部分組成:文件頭信息塊、圖像描述信息塊、顏色表(在真彩色模式無顏色表)和圖像數據區。在系統中以BMP為擴展名保存。位圖是最常用的windows圖形格式,通過windows API函數可以直接讀取并繪制,不過,有時(比如使用windows API有限制的時候),我們還是需要自己控制,那么,就讓我們看看它的格式吧! BMP圖象文件格式位圖文件的組成 結構名稱 位圖文件頭(bitmap-file header)BITMAPFILEHEADER位圖信息頭(bitmap-information header)BITMAPINFOHEADER彩色表(color table)RGBQUAD圖象數據陣列字節BYTE位圖文件頭 位圖文件頭(bitmap-file header )包含有關于文件類型、文件大小、圖象信息偏移量等信息: typedef struct tagBITMAPFILEHEADER { /* bmfh */ UINT bfType; DWORD bfSize; UINT bfReserved1; UINT bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; 位圖信息 位圖信息(bitmap-information )用BITMAPINFO結構來定義,它由位圖信息頭(bitmap-information header)和彩色表(color table)組成,前者用BITMAPINFOHEADER結構定義,后者用RGBQUAD結構定義。BITMAPINFO結構具有如下形式: typedef struct tagBITMAPINFO { /* bmi */ BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO; 位圖信息頭位圖信息頭(bitmap-information header) BITMAPINFOHEADER結構包含有位圖文件的大小、壓縮類型和顏色格式,其結構定義為:typedef struct tagBITMAPINFOHEADER { /* bmih */ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER; 彩色表 彩色表包含(color table)的元素與位圖所具有的顏色數相同,象素的顏色用RGBQUAD結構來定義。對于24-位真彩色圖象就不使用彩色表(同樣也包括16位、和32位位圖),因為位圖中的RGB值就代表了每個象素的顏色。彩色表中的顏色按顏色的重要性排序,這可以輔助顯示驅動程序為不能顯示足夠多顏色數的顯示設備顯示彩色圖象。RGBQUAD結構描述由R、G、B相對強度組成的顏色,定義如下: typedef struct tagRGBQUAD { /* rgbq */ BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; 位圖數據 緊跟在彩色表之后的是位圖文件的圖像數據區。圖象的每一掃描行由表示圖象象素的連續的字節組成,每一行的字節數取決于圖象的顏色數目和用象素表示的圖象寬度。掃描行是由底向上存儲的,這就是說,陣列中的第一個字節表示位圖左下角的象素,而最后一個字節表示位圖右上角的象素。 在此部分記錄著每點像素對應的顏色號,其記錄方式也隨顏色模式而定,即2色圖像每點占1位(8位為1字節);16色圖像每點占4位(半字節);256色圖像每點占8位(1字節);真彩色圖像每點占24位(3字節)。所以,整個數據區的大小也會隨之變化。究其規律而言,可的出如下計算公式:圖像數據信息大小=(圖像寬度*圖像高度*記錄像素的位數)/8。 24位真彩色BMP文件格式8位BMP文件格式注意:這里的位圖信息區記錄并不是真正的顏色信息,而只是顏色索引號。真正的顏色信息記錄在顏色表中。了解了BMP圖象文件格式后,我們再討論一下如何將真彩色BMP圖片轉換成256色BMP圖片,甚至16色BMP圖片的問題。雖然真彩色圖片所占比例越來越大,但在某些場合,仍需要256色甚至16色圖片,于是便需要對真彩色圖片進行轉換。我們已經知道,24位真彩色BMP圖片最多可以顯示2的24次方(16777216)種顏色,怎樣從中選出256種顏色,又要使顏色的失真比較小,這是一個比較復雜的問題。一種簡單的做法是將Red:Green:Blue以3:3:2表示,即取Red,Green的高3位,Blue的高2位,組成一個字節,這樣就可以表示256種顏色了。但不難想象,這種方法三原色失去平衡,失真肯定很嚴重。這種方法將不被采取。我們的做法是,對真彩色原圖中的每一個像素點,分別取Blue,Green,Red的高4位,組成一個12位整數。這樣原圖縮減為4096種顏色,這其中,有些顏色可能用了很多次,有些顏色可能一次沒用過。再在這4096種顏色中選出使用得最多的256種顏色。剩下的顏色我們也不能簡單的丟棄,而是要用已經篩選出的256種顏色來進行替代。替代的算法是用最小平方誤差找出最接近的顏色值。24位真彩色BMP轉換成256色BMP流程圖原圖對比看看轉換成256色的BMP圖和24位真彩色原圖的比較吧。接下來討論24位真彩色圖片到16色BMP圖片的轉換。我們知道,16色BMP圖片只能顯示16種顏色,這樣的圖片在顯示效果上顯然很難讓人滿意,但在某些場合卻必須使用16色圖片。根據前面的了解,我們可以知道16色BMP圖片至少應該有如下特點: 顏色表中有16種顏色,即顏色表的大小為16*4Bytes; 每個像素點的大小為4位,即半個字節。來看一下它的文件格式。4位BMP文件格式怎樣將24位真彩色BMP圖片轉換成16色BMP圖片?事實上,我們使用的轉換方法和前面提到的將24位真彩色BMP圖片轉換成256色BMP圖片的基本相同。首先也要將真彩色圖片中2的24次方種顏色縮減為4096種顏色,再從其中篩選中使用得最多的16種顏色,也用最小平方誤差的方法找出近似顏色進行替代。但是,在重寫圖象數據區,生成新圖片的時候,我們就要注意了。新的16色BMP圖片圖象數據區的顏色索引號只有4位,即半個字節,但在進行內存讀寫的時候,最小單位是8位,即1個字節。那么,如果按老辦法進行,將會出現什么樣的情況呢?0157 8這樣就會丟失一半的顏色信息,圖片將嚴重失真。由于16色BMP的顏色索引號只有4位,所以位圖信息區的每個字節低4位記錄了顏色信息,而高4位則被補零。0157 8所以,我們要這樣做……這樣就會丟失一半的顏色信息,圖片將嚴重失真。由于16色BMP的顏色索引號只有4位,所以位圖信息區的每個字節低4位記錄了顏色信息,而高4位則被補零。0157 807 15 815 807 07 注意:內存中數據記錄的方式和圖式不同,高字節在前,低字節在后。原圖對比讓我們再看看轉換成16色的BMP圖和24位真彩色原圖的比較吧。效果差得比較遠,但是對于只有16種顏色的圖片,也只能如此了……總結BMP圖形顏色轉換的幾個關鍵:重寫位圖文件頭和信息頭,重點是信息頭。重建顏色表。重寫位圖信息區,即填寫顏色索引號。位圖是否能正確顯示,關鍵在于填寫顏色索引號是否正確。
關 鍵 詞:
顏色 淺析 轉換 位圖 文件格式 圖形
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:位圖文件格式淺析和圖形顏色轉換.ppt
鏈接地址: http://www.476824.live/p-51579826.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 江苏快三投注 台湾宾果28开奖同步 腾讯分分彩1个月赢40w 真钱假钱怎么看 股票推荐排名 华东六省东方6+1 福建快3基本走图 12台 百家乐 软件 配资广告 配资被骗 不立案