基本上是很简单的把pixel逐行存储。视格式不同,每个pixel的组成不同。这里以常用的两种为例:

  • 256-Color:每个pixel对应一字节,存储的值为这个pixel的intensity,取值为[0,255]。

  • 24-Bit:每个pixel对应三字节,存储的值为这个pixel的三个通道的intensity,顺序为B/G/R,取值都是[0,255]。

但是,对于列宽不是4的整数倍的位图,存储时需要4字节补齐。

  • 256-Color:因为每行字节数与列宽相同,只需每行末补到4的倍数即可。

  • 24-Bit:每行先按像素*3计算出字节数,再把这个字节数补齐到4的倍数。而不是把像素本身补齐到4的倍数。

举例说,图片width = 130, height = 90,那么:

  • 256-Color:130 -> 132, DataSize = 132 * 90 = 11880 Bytes, TotalSize = 54 + 1024 + 11880 = 12958 Bytes

  • 24-Bit: 130 * 3 = 390 -> 392, DataSize = 392 * 90 = 35280 Bytes, TotalSize = 54 + 35280 = 35334 Bytes