2.2. CẤU TRÚC ẢNH BITMAP
2.2.2. Định dạng tệp ảnh bitmap
Ảnh Bitmap được lưu trữ dưới dạng nhị phân, một tệp định dạng bitmap được chia thành các phần cơ bản như:
+ Bitmap File Header gồm 14 byte + Bitmap Info gồm 40 byte
+ Color Palette - Bảng màu (đối với ảnh đen trắng, ảnh 16 bit, 24 bit, 32 bit thì không có bảng mầu)
+ Bitmap Data: Đây chính là vùng sẽ được dùng để giấu tin (hình 2.1). BITMAP HEADER
BITMAP INFORMATION COLOR PALETTE
BITMAP DATA
Hình 2.1. Minh hoạ cấu trúc tệp ảnh bitmap
2.2.2.1.Ý nghĩa các phần trong tệp ảnh bitmap
Bitmap Header: mô tả thông tin chung về định dạng tệp bitmap, kích thước
của phần này là cố định với mọi tệp ảnh bitmap.
Bitmap Information: mô tả thông tin về ảnh được lưu trữ, độ dài của phần này
cũng cố định.
Color Palette: chính là bảng màu của ảnh bitmap, độ dài của phần này có thể
bằng không (không có bảng màu) đối với ảnh đen trắng và ảnh màu có số lượng màu lớn hơn 256 màu.
Bitmap Data: Thông tin của từng điểm ảnh, lưu trữ ảnh theo hướng từ dưới lên
2.2.2.2. Kích thước và giá trị các trường trong tệp ảnh bitmap
Bitmap Header
Phần bitmap header có độ dài cố định là: 14 byte, phần này 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 Kiểu tệp „B‟ Có Cần
2 Kiểu tệp „M‟ Có Cần
3-6 Size of the file Unsigned long Không Cần
7-10 Reserved zero 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. Nhưng qua quá trình thực nghiệm đối với một số tệp thì thông tin này lại không chính xác, và trong luận văn đưa ra cách tính kích thước tệp 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 xác định thông qua công thức:
Đố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.
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 40 Không
5-8 Width of bitmap In pixels Có Cần
9-12 Height of bitmap In pixels Có Cần
13-14 Number of color planes 1 Không
15-16 Number of bits per pixels 1, 4, 8 hoặc 24
Có Cần
17-20 Type of compression Không
21-24 Size of image 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
Ảnh 24 bit là 0
Có Cần
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ữ (Reserver) và thứ tự lưu trữ là B, G, R, Reserved.
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 …
Như 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:
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