DDB和DIB 是什麼?區別?

BMP圖像文件是Windows   3.X   所採用的圖像文件格式,幾乎所有Windows   上的應用軟件都支持這種圖像文件,其中最常見的就是Windows本身所附的繪圖軟件(Paint-Brush),所以欲在Windows上探討圖像的文件格式,勢必要對BMP有一個完整而全面的認識。  
  BMP圖像分爲兩類,DDB和DIB,DDB(device-dependent   bitmap)即爲設備相關位圖,DIB(device-independent   bitmap)即爲設備無關位圖。  
  DDB中不包括顏色信息,顯示時是系統的調色板爲基礎進行各位的顏色映射的,Windows只能保證系統調色板的前20種顏色穩定不變,所以DDB只能保證正確顯示色彩少於20色的位圖,這便是侷限性。所以現在研究的基本上都是基於DIB的圖像文件。  
  DIB(設備無關位圖)可以在不同的機器或系統中顯示位圖所固有的顏色。與DDB相比而言,DIB是一種外部的位圖格式,經常存儲以BMP爲後綴的位圖文件。DIB位圖還支持圖像數據的壓縮。BMP文件由文件頭、位圖信息頭、顏色信息和圖像數據四部分組成。位圖結構如圖3-1所示:  
   
  位圖文件頭結構BITMAPFILEHEADER  
  位圖信息頭結構BITMAPINFOHEADER  
  位圖調色板RGBQUAD  
  位圖像素數據  
  圖3-1     DIB位圖結構  
  1. BMP文件頭:  
  BMP文件頭數據結構含有BMP文件的類型、文件大小和位圖起始位置等信息。其結構定義如下:  
  typedef   struct   tagBITMAPFILEHEADER  
  {  
      WORD     bfType;  
      WORD     bfSize;  
      WORD     bfReserved1;  
      WORD     bfReserved2;  
      WORD     bfOffBits;  
  }BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;  
  該結構的長度是固定的,爲14個字節,各個域的說明如下:  
   bfType:指定文件類型,必須是0x4d42,即字符串“BM”。  
   bfSize:指定文件大小,包括這14個字節。  
   bfReserved1,bfReserved2:保留字,爲0。  
   bfOffBits:從文件頭到實際的位圖數據的偏移字節數,即圖1中前三個部分的長度之和。  
   
  2.   位圖信息頭:  
  BMP位圖信息頭數據用於說明位圖的尺寸等信息。  
  typedef   struct   tagBITMAPINFOHEADER  
  {  
        DWORD     biSize;  
        LONG       biWidth;  
        LONG       biHeight;  
        WORD       biPlanes;  
        WORD       biBitCount;  
        DWORD     biCompression;  
        DWORD     biSizeImage;  
        LONG       biXPelsPerMeter;  
        LONG       biYPelsPerMeter;  
        DWORD     biClrUsed;  
        DWORD     biClrImportant;  
  }BITMAPINFOHEADER,FAR*LPBITMAPINFOHEADER,*PBITMAPINFOHEADER;  
  該結構的長度也是固定的,爲40個字節,各個域的說明如下:  
   biSize:指定這個結構的長度,爲40個字節。  
   biWidth:指定圖像的寬度,單位是象素。  
   biHeight:指定圖像的高度,單位是象素。  
   biPlanes:必須是1。  
   biBitCount:指定表示顏色時用到的位數,常用的值爲1(黑白二色圖)、4(16色圖)、8(256色圖)、24(真彩色圖)。  
   biCompression:指定位圖是否壓縮,有效值爲BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS。Windows位圖可採用RLE4和RLE8的壓縮格式,BI_RGB表示不壓縮。  
   biSizeImage:指定實際的位圖數據佔用的字節數,可用以下的公式計算出來:  
                            biSizeImage   =   biWidth’×   biHeight  
          要注意的是:上述公式中的biWidth’必須是4的整數倍(不是biWidth,而是大於或等於biWidth的離4最近的整數倍)。如果biCompression爲BI_RGB,則該項可能爲0。  
   biXPelsPerMeter:指定目標設備的水平分辨率。  
   biYPelsPerMeter:指定目標設備的垂直分辨率。  
   biClrUsed:指定本圖像實際用到的顏色數,如果該值爲0,則用到的顏色數爲2的biBitCount次冪。  
   biClrImportant:指定本圖像中重要的顏色數,如果該值爲0,則認爲所有的顏色數都是重要的。  
  3.   圖調色板(RGBQUAD):  
  第三部分爲調色板。有些位圖需要調色板,有些位圖,如真彩色圖,不需要調色板,它們的BITMAPINFOHEADER後面直接是位圖數據。  
  調色板實際上是一個數組,共有biClrUsed個元素(如果該值爲0,則有2的biBitCount次冪個元素)。數組中每個元素的類型是一個RGBQUAD結構,佔4個字節,其數據結構定義如下:  
  typedef   struct   tagRGBQUAD  
  {  
                    BYTE       rgbBlue;  
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章