Cấu trúc file bitmap, đọc và xử lý file bitmap
Số trang: 10
Loại file: pdf
Dung lượng: 183.45 KB
Lượt xem: 22
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Trong đồ họa máy vi tính, BMP, còn được biết đến với tên tiếng Anh khác là Windows bitmap, là một định dạng tập tin hình ảnh khá phổ biến. Các tập tin đồ họa lưu dưới dạng BMP thường có đuôi là .BMP hoặc .DIB (Device Independent Bitmap). Các thuộc tính tiêu biểu của một tập tin ảnh BMP (cũng như file ảnh nói chung) là số bit trên mỗi điểm ảnh (bit per pixel), thường được ký hiệu bởi n. Một ảnh BMP n-bit có 2n màu. Giá trị n càng lớn thì ảnh càng có nhiều...
Nội dung trích xuất từ tài liệu:
Cấu trúc file bitmap, đọc và xử lý file bitmap Cấu trúc file bitmap, đọc và xử lý file bitmapTrong đồ họa máy vi tính, BMP, còn được biết đến với tên tiếng Anh kháclà Windows bitmap, là một định dạng tập tin hình ảnh khá phổ biến. Các tập tin đồhọa lưu dưới dạng BMP thường có đuôi là .BMP hoặc .DIB (Device IndependentBitmap).Các thuộc tính tiêu biểu của một tập tin ảnh BMP (cũng như file ảnh nói chung) là số bit trên mỗi điểm ảnh (bit per pixel), thường được ký hiệu bởi n. Một ảnh BMP n-bit có 2n màu. Giá trị n càng lớn thì ảnh càng có nhiều màu, và càng rõ nét hơn. Giá trị tiêu biểu của n 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 có chất lượng hình ảnh trung thực nhất. chiều cao của ảnh (height), cho bởi điểm ảnh (pixel). chiều rộng của ảnh (width), cho bởi điểm ảnh. Cấu trúc tập tin ảnh BMP bao gồm 4 phần Bitmap Header (14 bytes): giúp nhận dạng tập tin bitmap. Bitmap Information (40 bytes): lưu một số thông tin chi tiết giúp hiển thị ảnh. Color Palette (4*x bytes), x là số màu của ảnh: định nghĩa các màu sẽ được sử dụng trong ảnh. Bitmap Data: lưu dữ liệu ảnh. Đặ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ếpvào tập tin – một điểm ảnh sẽ được mô tả bởi một hay 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 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 hay 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 đãcho ra đời phần mềm PaintBrush, một phần mềm hỗ trợ vẽ hình ảnh đơn giản vàlưu hình ảnh được vẽ dưới dạng BMP 16 hay 256 màu. Tuy nhiên, do kích thướctập tin ảnh BMP quá lớn, định dạng BMP không phù hợp để trao đổi hình ảnh quamạng Internet (do hạn chế về tốc độ truyền dữ liệu). Do đó, các trang web thườngsử dụng ảnh dạng GIF, JPEG hay PNG. Các định dạng này hỗ trợ các thuật toánnén hình ảnh, vì vậy có thể giảm bớt kích cỡ của ảnh.(theo Wikipedia)Cấu trúc Bitmap Header và Bitmap Informationstruct bmHeader // 14 byte{ // 2 byte - Mã nhận dạng file bitmap short type; unsigned int size;// 4 byte - Kích thước của file tính theo byte // 4 byte - Dự trữ, không sử dụng int reserved; // 4 byte - Vị trí bắt đầu dữ liệu ảnh int offset;};struct bmInfo // 40 byte{ // 4 byte - Kích thước phần Information (luôn l à unsigned long infoSize;40) // 4 byte - Chiều rộng ảnh tính bằng pixel unsigned long width; // 4 byte - Chiều cao ảnh tính bằng pixel unsigned long height; // 2 byte - Số plane màu (thường là 1) unsigned short planes; unsigned short bitsPerPixel;// 2 byte - Độ sâu của màu, mang các giá trị1,4,8 hoặc 24 unsigned long compression; // 4 byte - Kiểu nén (0: khôngnén);(1:run_lenght(8 bit/pixel));(2:run_length(4 bit/pixel)) // 4 byte - Kích thước phần dữ liệu ảnh tính theo unsigned long sizeImage;byte // 4 byte - Độ phân giải ngang (metter) long xPelsPerMeter; // 4 byte - Độ phân giải dọc (metter) long yPelsPerMeter; // 4 byte - Số màu sử dụng (= 0 nếu là tất cả) unsigned long clrUsed; unsigned long clrImportant; // 4 byte - Số màu quan trọng (= 0 nếu là tất cả)};Để đọc file bitmap ta cần mở file để đọc dưới dạng nhị phân:#include using namespace std;...ifstream fi(fName, ios::binary);//Các lệnh đọc filefi.close();Ta dùng phương thức read của ifstream để đọc dữ liệu Bitmap Header v àBitmap InfomationPhương thức (hàm) read của ifstream nhận vào 2 tham số: một con trỏ kiểu char vàkích thước dữ liệu đọc (kiểu int), do đó ta phải “ép kiểu” cho địa chỉ của header vàinfo về kiểu con trỏ char.bmHeader header;bmInfo info;fi.read((char*)&header, sizeof(header));fi.read((char*)&info, sizeof(info));Kiểm tra mã nhận dạng xem có đúng là file bitmap hay khôngconst short bmSign = MB;if (header.type != bmSign) //Kiểm tra mã nhận dạng{ //Thoát hàm đọc file, trả về kết quả đọc thất bại}Đọc bảng màu và dữ liệu ảnhcolorPaletteSize = header.offset - 54; //Kích thước của bảng màuchar* colorPalette = new char[colorPaletteSize];fi.read(colorPalette, colorPaletteSize );char* bmData = new char[info.sizeImage];fi.read ...
Nội dung trích xuất từ tài liệu:
Cấu trúc file bitmap, đọc và xử lý file bitmap Cấu trúc file bitmap, đọc và xử lý file bitmapTrong đồ họa máy vi tính, BMP, còn được biết đến với tên tiếng Anh kháclà Windows bitmap, là một định dạng tập tin hình ảnh khá phổ biến. Các tập tin đồhọa lưu dưới dạng BMP thường có đuôi là .BMP hoặc .DIB (Device IndependentBitmap).Các thuộc tính tiêu biểu của một tập tin ảnh BMP (cũng như file ảnh nói chung) là số bit trên mỗi điểm ảnh (bit per pixel), thường được ký hiệu bởi n. Một ảnh BMP n-bit có 2n màu. Giá trị n càng lớn thì ảnh càng có nhiều màu, và càng rõ nét hơn. Giá trị tiêu biểu của n 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 có chất lượng hình ảnh trung thực nhất. chiều cao của ảnh (height), cho bởi điểm ảnh (pixel). chiều rộng của ảnh (width), cho bởi điểm ảnh. Cấu trúc tập tin ảnh BMP bao gồm 4 phần Bitmap Header (14 bytes): giúp nhận dạng tập tin bitmap. Bitmap Information (40 bytes): lưu một số thông tin chi tiết giúp hiển thị ảnh. Color Palette (4*x bytes), x là số màu của ảnh: định nghĩa các màu sẽ được sử dụng trong ảnh. Bitmap Data: lưu dữ liệu ảnh. Đặ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ếpvào tập tin – một điểm ảnh sẽ được mô tả bởi một hay 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 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 hay 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 đãcho ra đời phần mềm PaintBrush, một phần mềm hỗ trợ vẽ hình ảnh đơn giản vàlưu hình ảnh được vẽ dưới dạng BMP 16 hay 256 màu. Tuy nhiên, do kích thướctập tin ảnh BMP quá lớn, định dạng BMP không phù hợp để trao đổi hình ảnh quamạng Internet (do hạn chế về tốc độ truyền dữ liệu). Do đó, các trang web thườngsử dụng ảnh dạng GIF, JPEG hay PNG. Các định dạng này hỗ trợ các thuật toánnén hình ảnh, vì vậy có thể giảm bớt kích cỡ của ảnh.(theo Wikipedia)Cấu trúc Bitmap Header và Bitmap Informationstruct bmHeader // 14 byte{ // 2 byte - Mã nhận dạng file bitmap short type; unsigned int size;// 4 byte - Kích thước của file tính theo byte // 4 byte - Dự trữ, không sử dụng int reserved; // 4 byte - Vị trí bắt đầu dữ liệu ảnh int offset;};struct bmInfo // 40 byte{ // 4 byte - Kích thước phần Information (luôn l à unsigned long infoSize;40) // 4 byte - Chiều rộng ảnh tính bằng pixel unsigned long width; // 4 byte - Chiều cao ảnh tính bằng pixel unsigned long height; // 2 byte - Số plane màu (thường là 1) unsigned short planes; unsigned short bitsPerPixel;// 2 byte - Độ sâu của màu, mang các giá trị1,4,8 hoặc 24 unsigned long compression; // 4 byte - Kiểu nén (0: khôngnén);(1:run_lenght(8 bit/pixel));(2:run_length(4 bit/pixel)) // 4 byte - Kích thước phần dữ liệu ảnh tính theo unsigned long sizeImage;byte // 4 byte - Độ phân giải ngang (metter) long xPelsPerMeter; // 4 byte - Độ phân giải dọc (metter) long yPelsPerMeter; // 4 byte - Số màu sử dụng (= 0 nếu là tất cả) unsigned long clrUsed; unsigned long clrImportant; // 4 byte - Số màu quan trọng (= 0 nếu là tất cả)};Để đọc file bitmap ta cần mở file để đọc dưới dạng nhị phân:#include using namespace std;...ifstream fi(fName, ios::binary);//Các lệnh đọc filefi.close();Ta dùng phương thức read của ifstream để đọc dữ liệu Bitmap Header v àBitmap InfomationPhương thức (hàm) read của ifstream nhận vào 2 tham số: một con trỏ kiểu char vàkích thước dữ liệu đọc (kiểu int), do đó ta phải “ép kiểu” cho địa chỉ của header vàinfo về kiểu con trỏ char.bmHeader header;bmInfo info;fi.read((char*)&header, sizeof(header));fi.read((char*)&info, sizeof(info));Kiểm tra mã nhận dạng xem có đúng là file bitmap hay khôngconst short bmSign = MB;if (header.type != bmSign) //Kiểm tra mã nhận dạng{ //Thoát hàm đọc file, trả về kết quả đọc thất bại}Đọc bảng màu và dữ liệu ảnhcolorPaletteSize = header.offset - 54; //Kích thước của bảng màuchar* colorPalette = new char[colorPaletteSize];fi.read(colorPalette, colorPaletteSize );char* bmData = new char[info.sizeImage];fi.read ...
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin cấu trúc dữ liệu lý thuyết đồ thị Javascript ASP.NET Tin học đại cương giáo trình Tin học đại cương bài giảng Tin học đại cương tài liệu Tin học đại cương lý thuyết Tin học đại cươngGợi ý tài liệu liên quan:
-
52 trang 429 1 0
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 316 0 0 -
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 312 0 0 -
Ứng dụng công cụ Quizizz thiết kế trò chơi học tập trong giảng dạy học phần tin học đại cương
12 trang 298 0 0 -
74 trang 294 0 0
-
96 trang 291 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 288 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 278 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 273 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0