为什么位图文件的大小为320x240 9730byte?

时间:2015-01-17 23:23:33

标签: bitmap

我的环境:

CentOS6.5 (32bit)
ext4 file system
Intel Fortran v14.0.1

我正在尝试读取bmp格式的文件。

the BMP file

我研究了bmp格式。 BITMAPFILEHEADER有14个字节,BITMAPINFOHEADER有40个字节。

图像的宽度和高度为320x240。 图像的颜色深度为1位。

根据我的计算,bmp文件的大小为

14 + 40 + 320x240/8 = 9654.

但实际尺寸为9730.

造成差异的原因是什么(9730 - 9654 = 76)?这是因为文件的扇区大小?

<小时/> 以下是我的代码(Fortran)打印标题信息。

implicit none
type :: t_bmpFileHeader
  sequence 
  integer(2) :: bfType
  integer(4) :: bfSize
  integer(2) :: bfReserved1
  integer(2) :: bfReserved2
  integer(4) :: bfOffBits
end type t_bmpFileHeader

type(t_bmpFileHeader) :: fheader

open(10, file='test.bmp', form='binary', status='unknown')
read(10) fheader

print *, fheader%bfSize
print *, fheader%bfOffBits

close(10)

end

输出(bfSize和bfOffBits)是

9730
130

<小时/> 以下是identify -verbose test.bmp的输出。

Image: test.bmp
Format: BMP (Microsoft Windows bitmap image)
Class: PseudoClass
Geometry: 320x240+0+0
Units: PixelsPerCentimeter
Type: Bilevel
Base type: Bilevel
Endianess: Undefined
Colorspace: Gray
Depth: 1-bit
Channel depth:
gray: 1-bit
Channel statistics:
  Pixels: 76800
  Gray:
    min: 0 (0)
    max: 1 (1)
    mean: 0.0985417 (0.0985417)
    standard deviation: 0.298046 (0.298046)
    kurtosis: 5.25731
    skewness: 2.69394
    entropy: 0.464356
Colors: 2
Histogram:
   69232: (  0,  0,  0) #000000 gray(0)
   7568: (255,255,255) #FFFFFF gray(255)
Colormap entries: 2
Colormap:
     0: (  0,  0,  0) #000000 gray(0)
     1: (255,255,255) #FFFFFF gray(255)
Rendering intent: Perceptual
Chromaticity:
  red primary: (0.64,0.33)
  green primary: (0.3,0.6)
  blue primary: (0.15,0.06)
  white point: (0.3127,0.329)
Background color: gray(255)
Border color: gray(223)
Matte color: gray(189)
Transparent color: gray(0)
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 320x240+0+0
Dispose: Undefined
Iterations: 0
Compression: Undefined
Orientation: Undefined
Properties:
  date:create: 2015-01-18T07:39:32+09:00
  date:modify: 2015-01-18T07:39:32+09:00
  signature: 15df8571403f34fba791b56123e6923fc88fcc9f24e57a24aad152c651f3a55d
Artifacts:
  filename: test.bmp
  verbose: true
Tainted: False
Filesize: 9.73KB
Number pixels: 76.8K
Pixels per second: 3.0130237EB
User time: 0.000u
Elapsed time: 0:01.000
Version: ImageMagick 6.9.0-4 Q16 i686 2015-01-17 http://www.imagemagick.org

1 个答案:

答案 0 :(得分:1)

像素数据的每条扫描线向上舍入为4字节的偶数倍。请确保考虑到这一点,因为不均匀的宽度将占用比您预期更多的字节(在这个特定示例中,320是4的偶数倍)。

位深度<= 8的位图有一个颜色表,您忽略它。所以还有8-1024个字节,具体取决于位深度和压缩类型。

可能存在其他标题字段和对齐填充,具体取决于位图类型(有许多选项可用于影响数据的打包方式)。

这些额外的细节很容易解释您缺少的额外字节,因此您必须注意位图标题实际告诉您的内容。

阅读以下内容以获取更多详细信息:

BMP file format

Bitmap Storage

BITMAPFILEHEADER structure

BITMAPINFO structure

BITMAPINFOHEADER structure