1/. Bitmap Header
Phần bitmap header có độ dài cố định là: 14 byte, dùng để mô tả thông tin chung về tệp nhƣ: kiểu tệp, độ dài của tệp và một số thông tin liên quan đến tệp ảnh. Ý nghĩa của từng trƣờng đƣợc mô tả trong bảng 2.1.
Bảng 2.1. Ý nghĩa các trƣờng trong vùng Bitmap Header
Byte Dữ liệu Giá trị Độ tin cậy Dùng để hiện ảnh
1 File Type (Kiểu tệp) „B‟ Có Cần
2 File Type (Kiểu tệp) „M‟ Có Cần
3-6 Size of the file
(Độ dài của tệp) Unsigned long Không Cần
7-10 Reserved (Dự trữ) 0 Không
11-14 Byte offset to bitmap data
Số TT (tính từ 0) byte đầu của BMP data
Có Cần
Trong phần Bitmap Header có lƣu trữ thông tin về kích thƣớc của tệp, thông tin này thực sự cần thiết đối với mọi chƣơng trình. Kích thƣớc tệp đƣợc tính thông qua công thức:
FileSize = Sizeof(Bitmap Header) + Sizeof(Bitmap Information) + Sizeof(Color Palette) + Sizeof(Bitmap Data) (2.1)
Địa chỉ vị trí (offset) của vùng dữ liệu có thể đƣợc xác định thông qua công thức:
Địa chỉ vùng Data = 54 + Sizeof(Color Palette) (2.2)
Đối với ảnh đen trắng và ảnh màu có số lƣợng màu lớn hơn 256 màu thì giá trị địa chỉ vùng data cố định là 54, vì các loại ảnh này không tổ chức bảng màu cho các điểm ảnh.
2/. Bitmap Information
Bitmap Informaion dùng để mô tả thông tin về ảnh đang đƣợc lƣu trữ trong tệp, kích thƣớc của phần này cố định là 40 byte. Ý nghĩa và giá trị của từng trƣờng trong vùng Bitmap Informaion đƣợc mô tả chi tiết trong bảng 2.2.
Bảng 2.2. Ý nghĩa các trƣờng trong vùng Bitmap Information
Byte Dữ liệu Giá trị Độ tin cậy Dùng hiện ảnh để
1-4 Number of bytes in Bitmap Info (Số byte của vùng)
40 Không
5-8 Width of bitmap (Chiều
rộng) In pixels
Có Cần
9-12 Height of bitmap (Chiều dài)
In pixels Có Cần
13-14 Number of color planes 1 Không
15-16 Number of bits per pixels (Số bít biểu diễn màu)
1, 4, 8 hoặc 24 Có Cần 17-20 Type of compression (Kiểu
nén)
Không 21-24 Size of image (Kích thƣớc
ảnh)
In bytes Không Không
25-28 Horizontal resolution Không
29-32 Vertical resolution Không
33-36 Number of colors in color Palette
(Số màu trong bảng màu)
Ảnh 24 bit là 0 Có Cần
37-40 Number of important colors
(Các màu quan trọng)
3/. Color Palette
Bảng màu là tập các màu đƣợc sử dụng trong ảnh (ảnh 8 bit màu), mỗi một màu trong bảng màu đƣợc gọi là một Entry và đƣợc lƣu trữ bởi 4 byte, mỗi thành phần màu đƣợc lƣu trữ bởi một byte còn một byte để dữ trữ (Reserved) và thứ tự lƣu trữ là B, G, R, Reserved. Bảng 2.3 thể hiện cách lƣu trữ của một bảng màu.
Bảng 2.3. Cấu trúc và nội dung của color palette
Byte Dữ liệu Giá trị Entry - chỉ số mầu
1 Blue color value 0 – 255 0
2 Green color value 0 – 255 0
3 Red color value 0 – 255 0
4 Reserved 0 0
5 Blue color value 0 – 255 1
6 Green color value 0 – 255 1
7 Red color value 0 – 255 1
8 Reserved 0 1
9 …
Vậy kích thƣớc của bảng màu của ảnh n bit có thể đƣợc tính theo công thức:
Sizeof(Color Palette) = (Number color) * 4 = 4 * 2n (2.3)
4/. Bitmap Data
Vùng dữ liệu ảnh là giá trị của các điểm ảnh, kích thƣớc của vùng dữ liệu ảnh phụ thuộc vào độ rộng, chiều cao và kiểu ảnh. Tốc độ truy xuất bộ nhớ đối với những dữ liệu đƣợc sắp xếp trong các địa chỉ đƣợc chia ngang nhau theo cấp số 2, sẽ nhanh hơn so với những dữ liệu không đƣợc sắp xếp nhƣ vậy. Do đó dữ liệu ảnh đƣợc đóng gói theo từng hàng (rows) với kích thƣớc là bội của dword (32-bit).
Kích thƣớc một hàng đƣợc tính nhƣ sau: 32 * * 4 n Rowsize (2.4) Kích thƣớc vùng ảnh có thể đƣợc tính theo công thức (2.5): Height Rowsize BitmapData Sizeof( ) * (2.5) Với ảnh 8 bit màu giá trị của mỗi điểm ảnh trong vùng Data là chỉ số của màu trong bảng màu, chỉ số màu của điểm ảnh là một số nguyên có giá trị từ 0
đến 255 và đƣợc lƣu trữ trong một byte.
Với ảnh có số lƣợng màu lớn hơn 256 màu thì giá trị trong vùng Data chính là giá trị của các thành phần màu cơ bản, số lƣợng bit dùng để biểu diễn giá trị cho từng thành phần màu có thể sẽ khác nhau phụ thuộc vào chất lƣợng ảnh.
Đối với ảnh 24 bit màu, mỗi thành phần màu đƣợc lƣu trữ bởi 8 bit và thứ tự lƣu trữ là B, G, R. Kích thƣớc của tệp ảnh BMP đƣợc lƣu trên bộ nhớ đƣợc tính bằng công thức (2.6):
Height Rowsize
n