1. 程式人生 > 實用技巧 >win32 - 計算點陣圖所需的位元組總數

win32 - 計算點陣圖所需的位元組總數

BITMAPINFOHEADER文件詳細介紹了所需要的步驟,

對於未壓縮的RGB格式,最小跨度始終是影象寬度(以位元組為單位),四捨五入到最接近的DWORD。可以使用以下公式來計算步幅:

stride = ((((biWidth * biBitCount) + 31) & ~31) >> 3)

要計算點陣圖所需的位元組總數,請將步幅乘以行數。

對於YUV格式,沒有用於計算最小步幅的通用規則。

上面的公式我們可以稱為行補位,那麼行補位的作用是什麼?

  • 因為32位的Windows作業系統處理4個位元組(32位)的速度比較快,所以BMP的每一行顏色佔用的位元組數規定為4的整數倍。

比如,一行顏色有兩個畫素,共佔用6位元組,如果要補齊4*2=8位元組,就要再加兩個0位元組。

拓展:

   1.如果是非黑即白的二值影象,不壓縮的情況下一個畫素只需要1個bit。 如果是256種狀態的灰度影象,不壓縮的情況下一個畫素需要8bit(1位元組,256種狀態)。 如果用256種狀態標識螢幕上某種顏色的灰度,而螢幕採用三基色紅綠藍(RGB),不壓縮的情況下一個畫素需要佔用24bit(3位元組),這個就是常說的24位真彩色。 還有各種其他的儲存方式,例如15bit、16bit、32bit 如果考慮到壓縮,情況就更復雜了,是有失真壓縮還是無失真壓縮,具體採用哪種壓縮演算法,壓縮引數引數設定等等都會影響到一個畫素佔用的儲存空間。

    當biBitCount=1時,8個畫素佔1個位元組;
    當biBitCount=4時,2個畫素佔1個位元組;
    當biBitCount=8時,1個畫素佔1個位元組;
    當biBitCount=24時,1個畫素佔3個位元組;

   2.對於24位點陣圖畫素格式是:藍色B值、綠色G值、紅色R值

     對於32位點陣圖畫素格式是:藍色B值、綠色G值、紅色R值、透明通道A值.

     透明通道也稱Alpha通道,該值是該畫素點的透明屬性,取值在0(全透明)到255(不透明)之間。如果32位點陣圖轉為24位點陣圖,則A值設為255.

     如果影象是單色、16色和256色,則緊跟著調色盤的是點陣圖資料,點陣圖資料是指向調色盤的索引序號。

     如果點陣圖是16位、24位和32位色,則影象檔案中不保留調色盤,即不存在調色盤,影象的顏色直接在點陣圖資料中給出。