DDB与DIB
DB與DIB的區別是什么?覺得書上介紹的有點抽象、不容易理解。他們兩者之間的區別的“物理意義” 【“現實意義”】——姑且這么叫吧,呵呵!被這個問題困擾了很久,所以今天決定好好查資料總結一下,把它徹底搞清楚,也希望能對那些和我一樣有著困惑的你 起到一點幫助。轉入正題:
【與位圖相關的基礎概念:】
DDB位圖(Device-dependent Bitmap):設備相關位圖,也有書上稱為GDI位圖(Graphic Device Interface—圖形設備接口)。
DIB位圖(Device-independent Bitmap):設備無關位圖。
GDI位圖是一種GDI對象,在MFC中用CBitmap類來表示。在CBitmap類對象中,包含 一種和Windows的GDI模塊有關的Windows數據結構,該數據結構是與設備相關的。【應用程序可以得到GDI位圖數據的一個備份,但是其中位圖 的安排則完全依賴于顯示設備。我們可以將GDI位圖數據在同一臺計算機內的不同程序間任意傳遞,但是由于其對設備的依賴性,在不同類型計算機間的傳遞是沒 有意義的。(由于他們是設備相關的,通過磁盤或者網絡來傳輸,其意義就很不明顯。)】【這段話是從書上摘下來的。】
區別:DIB由于自帶顏色表,理論上說在不同的設備上顯示時均可按原來的顏色還原顯示,或仿真顯示, 但是很明顯顏色表需要消耗一定的存儲空間,并且在每次顯示時均要對顏色進行處理,因此速度較慢。【而DDB中不包含顏色信息,因此顯示時以系統的調色板為 基礎進行各位的顏色映射,Windows操作系統只能保證系統調色板的前20中顏色穩定不變,所以DDB只能保證正確顯示少于20種的顏色位圖。簡言 之,DDB由于直接對顏色位平面進行記錄,因此顯示速度最快,但是在不同的設備上顯示時不能保證顏色的還原。 ? 】
論壇中各種類似的說法如下:
????
1、主要區別就是顏色表,一般來說,在剪貼板中存放的是DDB(比如截屏的時候獲得的),在文件中存放的是DIB?。
2、把DIB轉換成DDB??:?你可以把一個設備無關位圖(DIB)在不轉換成設備相關位圖(DDB)的情況下顯示到設備環境中,但是,這樣做顯示速度將慢很多。如果進行轉換,將提高顯示速度。
3、圖象要顯示出來必須轉換成設備相關位圖
4、把DDB轉換成DIB:設備相關位圖(DDB)顯示方式是盡可能與顯示設備驅動程序相匹配,這樣,DDB不可能與其他顯示設備兼容;而設備無關位圖(DIB)能與所有顯示設備兼容,但是,其缺點在于顯示速度比較慢。???
???
5、 我們需要把DDB轉換為DIB的一種情況是,需要將位圖保存到一個文件中。?
?
關于DIB數據結構以及DDB和DIB兩者之間如何轉換就不需要我嘮叨啦,網上很容易找到資料。
?
?
?
1. 基本概念
先來用通俗的語句講解位圖和調色板的概念。
我們知道,自然界中的所有顏 色都可以由紅、綠、藍(R,G,B)三基色組合而成。針對含有紅、綠、藍色成分的多少,可以對其分別分成0~255個等級,而紅、綠、藍的不同組合共有 256×256×256種,因此約能表示1600萬種顏色。對于人眼而言,這已經是"真彩色"了。
對每個像素進行了(R,G,B)量化的圖像就是位圖,其在計算機中對應文件的擴展名一般為.bmp。既然用R,G,B的量化值就可以直接記錄一張位圖的所有像素,那我們需要調色板干什么呢?
首先,我們可以計算完全利用(R,G,B)組合來存儲一個800×600的位圖所需要的空間為:
800×600×3 = 1440000(字節)= 1.37M(字節)
驚人的大!因此,調色板橫空出世了,它的功能在于緩解位圖文件存儲空間過大的問題。
假設一個位圖為16色,其像素總數為800×600。我們只需要用4個bit就可以存儲這個位圖的每個像素在16種顏色中所處的等級,然后調色板提供了這16種等級對應的(R,G,B)值,這樣,存儲這個16色位圖只需要:
800×600×4/8 = 240000(字節)= 0.22 M(字節)
額外的存儲R,G,B表的開銷(即調色板Palette,也稱為顏色查找表LUT)僅僅為16×3=48字節。
存儲空間被大為減少!
常見的位圖有單色、16色、256色、16位及24位真彩色5種,對于前三者(即不大于256色)都可以調色板方式進行存儲,而對16位及24位真彩色以調色板進行存儲是不劃算的,它們直接按照R,G,B分量進行存儲。
在此基礎上我們來分析DDB位圖(Device-dependent bitmap,與設備相關的位圖)與DIB位圖(Device-independent bitmap,與設備無關的位圖)的概念以及二者的區別。
DDB依賴于具體設備,它只能存在于內存中(視頻內存或系統內存),其顏色模式必須與特定的輸出設備相一致,使用系統調色板。一般只能載入色彩較簡單的DDB位圖,對于顏色較豐富的位圖,需使用DIB才能長期保存。
DIB不依賴于具體設備,可以用來永久性地保存圖象。DIB一般是以*.BMP文件的形式保存在磁盤中的,有時也會保存在*.DIB文件中。 DIB位圖的特點是將顏色信息儲存在位圖文件自身的顏色表中,應用程序要根據此顏色表為DIB創建邏輯調色板。因此,在輸出一幅DIB位圖之前,程序應該 將其邏輯調色板選入到相關的設備上下文并實現到系統調色板中。
轉載于:https://www.cnblogs.com/sideny/p/3272940.html
總結
- 上一篇: Android的GridView和Gal
- 下一篇: 转:HTTP请求(GET、POST和so