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:
- Full câu hỏi trắc nghiệm nguyên lý hệ điều hành
- giải thuật Banker là gì – Bài tập có lời giải
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: