(biwidth*biBitCount/8+3)/4*4
轉自:http://wenda.tianya.cn/question/510127906cc5c480
在VC++中,讀入BMP影象必須把每行所佔的位元組數轉換為4的倍數,用了這個公式(biwidth*biBitCount/8+3)/4*4,不明白其含義
注意:C語言的除法裡,兩個int相除,結果會被CUT掉——只取商而不取餘數。
biwidth*biBitCount/8 好理解,就是一個掃描行的位元組數(如:100 * 24/8,即100 * 3 ,有100個畫素,每個畫素有3個位元組,所以每行總位元組數為300),
記 b = biwidth*biBitCount/8, 那麼, 原式 =(b+3)/4*4,
情況一,b是四的倍數,(b+3)/4*4
== (b/4*4 + 3/4*4) == b + 0 == b
(如上:300是4的倍數,所以(300+3)/4*4 == (300/4*4)+3/4*4 == 75*4+(3/4*4)(因C程式裡兩個int相除,只取整數,所以3/4*4等於0 ),即結果為300 Bytes)
情況二,b不是四的倍數
另
b = 4x+n,其中4x就是x的4倍數,n就是那個餘數。
容易得知:1 <= n <= 3, 4 <= n+3 <= 6,
於是,原式 == (4x+n + 3)/4*4,
(其中x是任意值),
== (4x/4*4 + (n+3)/4*4)
在C語言中 == 4x + 4 == (x+1)*4
例如:
1. (16)/4*4 == 16,
2. (18+3)/4*4 == (16+2+3)/4*4 == (16 + 5)/4*4 == (4+1)*4 == 20
(33+3)/4*4 == (32+1+3)/4*4 == (32 + 4)/4*4 == (8+1)*4 == 36
(34+3)/4*4 == (32+2+3)/4*4 == (32 + 5)/4*4 == (8+1)*4 == 36
(35+3)/4*4 == (32+3+3)/4*4 == (32 + 6)/4*4 == (8+1)*4 == 36
相關文章
- DataSizePerLine= (biWidth* biBitCount+31)/8,是個啥意思呢?
- ●類化意識●4解4連環(4)
- 4.RabbitMQ 4種交換模式MQ模式
- search(4)- elastic4s-ElasticDslAST
- 4-4 Redis 的常用配置Redis
- 4_4雙棧佇列佇列
- Internet Protocol version 4 (IPv4)Protocol
- webpack4+react16+react-router4WebReact
- jQuery使用總結-CorejQuery其他4/4jQuery
- 2024年4月4號
- 機器學習-4機器學習
- ASM (4)ASM
- junit 4
- 4/23
- 4/24
- 4、NAT
- 4 7
- 4/7
- 4/9
- 4 11
- English 4
- Day 4
- java(4)Java
- .NET Framework 4 和 .NET Framework 4 Client ProfileFrameworkclient
- 使用Identity Server 4建立Authorization Server (4)IDEServer
- JF +Spring 4 +JUNIT4 測試?Spring
- rhel 4 update4 的核心版本號
- slf4j-api、slf4j-log4j12以及log4j之間什麼關係?API
- Spring4學習(四)Spring4中整合Hibernate4Spring
- 即將推出的CSS4 Level 4 Selectors(第4級選擇器)CSS
- 密碼管理器進化史(4/4)密碼
- ●類化意識●4解4連環(5)
- ●類化意識●4解4連環(6)
- ●類化意識●4解4連環(7)
- ●類化意識●4解4連環(8)
- 4月4日網站變灰實錄網站
- ●類化意識●4解4連環(1)
- ●類化意識●4解4連環(2)