「画像の横幅widthとbppが与えられて4バイトでalignされたpitchを求める式」
2005-04-15
に出てきた式を何とか理解したい!
pitch = (((width * bpp + 7)>>3)+3)&~3;
まず、"width * bpp"の部分。幅*1pixelあたりのbit数。
→1ラインのbit数。
次に、"+ 7)>>3"の部分。7を足して3bit切り捨てつつ8で割る。つまり、繰り上げて8(1Byteあたりのbit数)の倍数にしつつ8で割る。
→1ラインの最低限必要なbyte数。
最後に、"+3)&~3"の部分。3を足して2bit切り捨て。つまり、繰り上げて4の倍数にする。
→4バイトでalignされたpitch(1ラインのbyte数)
どっちもやってることは、繰上げなのか。
これだけ理解するのに1時間近くかかっとるし。
もう一個あった。
pitch = ((width * bpp + 31)>>3)&~3;
より複雑になっとる。
1ラインのbit数に31を足す。31 = 4byte - 1だな。
う〜む。感覚的にはわかるんだが…
さっきの8で割ってから+3するかわりに先に+3*8=+24するので、+7とあわせて+31。
いまいちだな。
直接この式にたどりつく発想は……?やっぱ経験ですかね。
まてよ、こうしたらどうだろう。
pitch = (((width * bpp + 31)&~31)>>3;
個人的にはこっちのほうがわかりやすいかなあ。
参考にさせていただきました↓
id:replicorn:20050415
id:replicorn:20050416