一、定義 #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4); 計(jì)算圖像每行象素所占的字節(jié)數(shù)目,設(shè)置成4的整數(shù)倍 //=(((bits) + 31) / 8) //=((( biWidth* biBitCount) + 31) / 8) 二、參數(shù)說(shuō)明: bits:一個(gè)btmap中一行像素的位數(shù)總和。 bits:=biWidth* biBitCount; biWidth:像素個(gè)數(shù) biBitCount:一個(gè)像素所占的位數(shù) 當(dāng)biBitCount=1時(shí),8個(gè)像素占1個(gè)字節(jié); 當(dāng)biBitCount=4時(shí),2個(gè)像素占1個(gè)字節(jié); 當(dāng)biBitCount=8時(shí),1個(gè)像素占1個(gè)字節(jié); 當(dāng)biBitCount=24時(shí),1個(gè)像素占3個(gè)字節(jié) 也就是一個(gè)像素占biBitCount/8個(gè)字節(jié) 三、實(shí)例: 對(duì)于2色圖,如果圖象寬是31,則每一行需要31位存儲(chǔ),合3個(gè)字節(jié)加7位,因?yàn)樽止?jié)數(shù)必須是4的整倍數(shù),所以應(yīng)該是4,而此時(shí)的 biWidth=31, biBitCount=1, WIDTHBYTES(31*1)=4,和我們?cè)O(shè)想的一樣。 舉一個(gè)256色的例子,如果圖象寬是31,則每一行需要31個(gè)字節(jié)存儲(chǔ),因?yàn)樽止?jié)數(shù)必須是4的整倍數(shù),所以應(yīng)該是32,而此時(shí)的biWidth=31, biBitCount=8, WIDTHBYTES(31*8)=32。 四、相關(guān)知識(shí)說(shuō)明 1.將圖像文件寬度設(shè)置成4的整數(shù)倍,只有bmp格式要求采用,其他格式的圖像并不要求是4的倍數(shù)。 2.bmp格式采用這一做法,我想是為了考慮訪問(wèn)的速度。從文件讀出圖像數(shù)據(jù)時(shí),一次讀4個(gè)字節(jié)比一次讀1個(gè)字節(jié)快。但如果圖像文件不是4的倍數(shù)時(shí),每行最后的像素就不可能[注]采用一次讀4個(gè)字節(jié)(否則就會(huì)把下一行的像素也讀出)。當(dāng)然,你仍然可以讀出的4字節(jié)來(lái),但必須處理:將其中幾個(gè)字節(jié)放在本行,而其余的顯示到下一行. 但顯然這很不方便,要影響速度。 3. 位圖數(shù)據(jù)記錄了位圖的每一個(gè)像素值,記錄順序是在掃描行內(nèi)是左到右,掃描行之間是從下到上。Windows規(guī)定一個(gè)掃描行所占的字節(jié)數(shù)必須是4的倍數(shù)(即以long為單位),不足的以0填充 |
|
來(lái)自: 啟蒙彩魂 > 《我的圖書(shū)館》