Trình bày cấu trúc Header của file BMP – Ví dụ minh họa

Chắc hẳn, chúng ta đã từng tiếp xúc với những hình ảnh định dạng BMP. Nhưng vì sao file ảnh lại được chia thành các format khác nhau mà đặc biệt là BMP? . Bài viết này TTnguyen sẽ trình bày về cấu trúc Header của file BMP sẽ giúp bạn hiểu rõ hơn về định dạng file hình ảnh phổ biến này.

Xem thêm:

1. Giới thiệu về Bitmap

Trong lĩnh vực đồ họa máy tính, Bitmap là một định dạng tập tin ảnh phổ biến. Nó được biết đến với tên tiếng Anh là Windows Bitmap. Các tập tin hình ảnh lưu dưới định dạng bitmap thường có phần mở rộng là .BMP hoặc .DIB (Device Independent Bitmap).

2. Các thuộc tính của tập tin ảnh bitmap

Các thuộc tính tiêu biểu của một tập tin ảnh bitmap bao gồm:

  • Số bit trên mỗi điểm ảnh (bits per pixel – bpp): Đây là số bit được sử dụng để biểu diễn mỗi điểm ảnh trong hình ảnh. Một ảnh bitmap n-bit sẽ có 2^n màu khác nhau. Giá trị của n thường là 1 (ảnh đen trắng), 4 (ảnh 16 màu), 8 (ảnh 256 màu), 16 (ảnh 65536 màu), và 24 (ảnh 16 triệu màu). Ảnh BMP 24-bit thường có chất lượng hình ảnh cao nhất.
  • Chiều cao của ảnh (height): Đây là số lượng điểm ảnh theo chiều dọc của hình ảnh.
  • Chiều rộng của ảnh (width): Đây là số lượng điểm ảnh theo chiều ngang của hình ảnh.

Các thuộc tính này cung cấp thông tin quan trọng về độ phân giải và số lượng màu sắc được biểu diễn trong mỗi điểm ảnh của tập tin ảnh bitmap.

3. Cấu trúc tập tin bitmap

Cấu trúc tập tin ảnh BMP bao gồm 4 phần chính:

– Bitmap Header (14 bytes): Đây là phần đầu tiên của file BMP, có kích thước cố định là 14 byte. Chúng chứa các thông tin cơ bản về tập tin bitmap như kích thước của toàn bộ tập tin, vị trí bắt đầu của dữ liệu hình ảnh, và các thông số khác.

Bitmap Information (40 bytes): Phần này lưu trữ các thông tin chi tiết về ảnh như kích thước của hình ảnh, số lượng bit trên mỗi điểm ảnh, chiều rộng và chiều cao của hình ảnh, cũng như các thông số khác như số lượng màu sắc trong bảng màu.

Color Palette (4*x bytes): Đây là phần định nghĩa các màu sắc sẽ được sử dụng trong ảnh. Kích thước của phần này phụ thuộc vào số lượng màu sắc có trong ảnh. Mỗi màu sẽ được biểu diễn bằng 4 byte (RGBA – Red, Green, Blue, Alpha).

Bitmap Data: Phần này lưu trữ dữ liệu hình ảnh thực tế, đại diện cho từng điểm ảnh trong ảnh. Dữ liệu này được tổ chức theo thứ tự từ trái qua phải và từ trên xuống dưới, và mỗi điểm ảnh sẽ được biểu diễn bằng một hoặc nhiều byte tùy thuộc vào số lượng bit trên mỗi điểm ảnh.

4. Đặc điểm của tập tin bitmap

Đặc điểm nổi bật nhất của định dạng BMP là tập tin hình ảnh thường không được nén bằng bất kỳ thuật toán nào. Khi lưu ảnh, các điểm ảnh được ghi trực tiếp vào tập tin – một điểm ảnh sẽ được mô tả bằng một hoặc nhiều byte tùy thuộc vào giá trị n của ảnh. Do đó, một hình ảnh lưu dưới dạng BMP thường có kích thước rất lớn, gấp nhiều lần so với các ảnh được nén (chẳng hạn GIF, JPEG hoặc PNG).

Định dạng BMP được hỗ trợ bởi hầu hết các phần mềm đồ họa chạy trên Windows, và cả một số ứng dụng chạy trên MS-DOS. Ngay từ Windows 3.1, Microsoft đã phát triển phần mềm PaintBrush, một ứng dụng đơn giản hỗ trợ vẽ hình ảnh và lưu hình ảnh dưới dạng BMP với 16 hoặc 256 màu.

Tuy nhiên, do kích thước tập tin ảnh BMP quá lớn, định dạng BMP không phù hợp để trao đổi hình ảnh qua mạng Internet (do hạn chế về tốc độ truyền dữ liệu). Do đó, các trang web thường sử dụng các định dạng ảnh như GIF, JPEG hoặc PNG. Các định dạng này hỗ trợ các thuật toán nén hình ảnh, giúp giảm kích thước của ảnh một cách hiệu quả.

5. Cấu trúc header của tập tin bitmap

Bitmap header là gì?

Bitmap Header (14 bytes) là một khối byte nằm ở đầu của tệp và được sử dụng để xác định định dạng của tệp. Một ứng dụng thông thường sẽ đọc khối này trước để đảm bảo rằng tệp thực sự là tệp BMP và không bị hỏng. Hai byte đầu tiên của định dạng tệp BMP là ký tự “B” tiếp theo là ký tự “M” trong mã ASCII. Tất cả các giá trị số nguyên được lưu trữ ở định dạng little-endian, có nghĩa là byte có ý nghĩa nhỏ nhất được lưu trữ trước tiên.

Cấu trúc file header

Hệ Hex Hệ Dec Kích thước (bytes) Mục đích
00 0 2 Trường Header được sử dụng để xác định tệp BMP và DIB 0x42, 0x4D ở dạng Hex , giống như BM trong ASCII.
02 2 4 Kích thước file ảnh BMP tính bằng byte
06 6 2 Dự trữ, giá trị tùy thuộc vào ứng dụng tạo ra file hình ảnh
08 8 2 Dự trữ, giá trị tùy thuộc vào ứng dụng tạo ra file hình ảnh
0A 10 4 Địa chỉ bắt đầu của nội dung file

6. Ví dụ về BMP

Offset Kích thước (byte) Giá trị Hex Giá trị Mục đích
BMP header
0h 2 42 4D “BM” Trường ID (42h, 4Dh)
2h 4 46 00 00 00 70 bytes (54+16) Kích thước của tệp
6h 2 00 00 Không sử dụng Ứng dụng cụ thể
8h 2 00 00 Không sử dụng Ứng dụng cụ thể
Ah 4 36 00 00 00 54 bytes (14+40) Nơi mảng pixel dữ liệu có thể tìm thấy
DIB header
Eh 4 28 00 00 00 40 bytes Số bytes trong DIB header từ đây
12h 4 02 00 00 00 2 pixel (từ trang sang phải) Chiều rộng của bitmap tình bằng pixel
16h 4 02 00 00 00 2 pixel (từ dưới lên) Chiều cao của bitmap tính bằng pixel
1Ah 2 01 00 1 plane Số lượng mặt phẳng màu đang được sử dụng
1Ch 2 18 00 24 bits Số bit trên mỗi pixel
1Eh 4 00 00 00 00 0 BI_RBG, không nén mảng pixel
22h 4 10 00 00 00 16 bytes Kích thước của dữ liệu bitmap thô
26h 4 13 0B 00 00 2835 pixel/mét chiều ngang Độ phân giải in của hình ảnh

72 DPI x 39,3701 inch mỗi mét mang lại 2834,6472

2Ah 4 13 0B 00 00 2835 pixel/mét chiều dọc
2Eh 4 00 00 00 00 0 màu sắc Số lượng màu trong bảng màu
32h 4 00 00 00 00 0 màu quan trọng 0 có ý nghĩa tất cả màu đều quan trọng
Bắt đầu mảng Pixel (dữ liệu bitmap)
36h 3 00 00 FF 0 0 255 Đỏ, pixel (0,1)
39h 3 FF FF FF 255 255 255 Trắng, pixel (1,1)
3Ch 2 00 00 0 0 Đệm cho căn chỉnh 4 bytes (có thể là giá trị khác 0)
3En 3 FF 00 00 255 0 0 Màu xanh dương, pixel (0,0)
41h 3 00 FF 00 0 255 0 Màu xanh lá cây, pixel (1,0)
44h 2 00 00 00 Đệm cho căn chỉnh 4 bytes (có thể là giá trị khác 0)

Qua bài viết, hy vọng bạn đã nắm rõ hơn cấu trúc Header của file BMP. Kiến thức về cấu trúc file BMP không chỉ giúp bạn có những hiểu biết sâu rộng về nguyên lý hệ điều hành máy tính mà còn biết thêm về định dạng hình ảnh phổ biến.

Bài viết liên quan:

bài tập nguyên lý hệ điều hành có lời giải

 

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em