File ảnh BMP

Tài liệu File ảnh BMP: File ảnh BMP Nếu ta hình dung trong một tệp ảnh xếp liên tiếp các byte từ đầu đến cuối và dồn chúng vào trong một hộp chữ nhật, thì có thể hình dung tệp ảnh BMP như hình vẽ sau: Hình 1. Cấu trúc file ảnh BMP Data of Image ảnh 24 bit Mỗi điểm ảnh chiếm 3 byte mô tả ba thành phần: Red, Green, Blue. ảnh 256 màu Mỗi điểm ảnh chiếm 1 byte, chỉ số hiệu màu của điểm ảnh này. Số hiệu màu của các điểm ảnh: 0, 1, .., 255 Màu của điểm ảnh được mô tả trong bảng màu. Giả sử byte mô tả điểm ảnh có giá trị là b và bảng màu được chứa trong mảng P, thì thành phần các màu của điểm ảnh này là P[b].R, P[b].G, P[b].B. Chẳng hạn, một điểm ảnh có số hiệu màu 20, các thành phần của màu 20 là P[20].R, P[20].G, P[20].B ảnh 16 màu Bảng màu có 16 màu, được đánh số từ 0 đến 15. Mỗi điểm ảnh được mô tả bởi một con số, có giá trị từ 0 đến 15. Do vậy, giá trị mỗi điểm ảnh chỉ cần 4 bit để mô tả. Hai điểm ảnh được chứa trong một byte: điểm ảnh đứng trước (bên trái) được chứa trong 4 bit cao, điểm ảnh...

doc8 trang | Chia sẻ: hunglv | Lượt xem: 1803 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu File ảnh BMP, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
File ảnh BMP Nếu ta hình dung trong một tệp ảnh xếp liên tiếp các byte từ đầu đến cuối và dồn chúng vào trong một hộp chữ nhật, thì có thể hình dung tệp ảnh BMP như hình vẽ sau: Hình 1. Cấu trúc file ảnh BMP Data of Image ảnh 24 bit Mỗi điểm ảnh chiếm 3 byte mô tả ba thành phần: Red, Green, Blue. ảnh 256 màu Mỗi điểm ảnh chiếm 1 byte, chỉ số hiệu màu của điểm ảnh này. Số hiệu màu của các điểm ảnh: 0, 1, .., 255 Màu của điểm ảnh được mô tả trong bảng màu. Giả sử byte mô tả điểm ảnh có giá trị là b và bảng màu được chứa trong mảng P, thì thành phần các màu của điểm ảnh này là P[b].R, P[b].G, P[b].B. Chẳng hạn, một điểm ảnh có số hiệu màu 20, các thành phần của màu 20 là P[20].R, P[20].G, P[20].B ảnh 16 màu Bảng màu có 16 màu, được đánh số từ 0 đến 15. Mỗi điểm ảnh được mô tả bởi một con số, có giá trị từ 0 đến 15. Do vậy, giá trị mỗi điểm ảnh chỉ cần 4 bit để mô tả. Hai điểm ảnh được chứa trong một byte: điểm ảnh đứng trước (bên trái) được chứa trong 4 bit cao, điểm ảnh đứng sau (bên phải) được chứa trong 4 bit thấp. Ví dụ, byte b = 217 (11011001) chứa dữ liệu của hai điểm ảnh có giá trị lần lượt là 13 và 9. ảnh 2 màu Bảng màu có 2 màu, được đánh số từ 0 đến 1. Mỗi điểm ảnh được mô tả bởi một con số, có giá trị 0 hoặc 1. Do vậy, giá trị mỗi điểm ảnh chỉ cần 1 bit để mô tả. Tám điểm ảnh được chứa trong một byte: điểm ảnh đứng trước (bên trái) được chứa trong bit cao, điểm ảnh đứng sau (bên phải) được chứa trong bit thấp. Ví dụ, byte b = 217 (11011001) chứa dữ liệu của 8 điểm ảnh có giá trị lần lượt là 1, 1, 0,1, 1, 0, 0 và 1. Color Palette (Bảng màu) ảnh 24 bit: Tệp ảnh không có bảng màu ảnh 256, 16 và 2 màu Bảng màu chiếm 256*4=1024, 16*4=64, 2*4=8 byte Mỗi màu được mô tả bởi 4 byte, thể hiện 4 thành phần màu: BLUE, GREEN, RED và DARKGRAY. Với hầu hết các tệp ảnh BMP, thành phần DARKGRAY bằng 0. Giá trị của các thành phần BLUE, GREEN và RED được lưu trữ ở 6 bit cao. Blue Green Red Darkgray Red Green Blue Blue Green Red Darkgray Blue Green Red Darkgray Blue Green Red Darkgray III. Header Header của các tệp ảnh BMP gồm 54 byte, được mô tả chi tiết trong bảng sau: File Header Số bytes ý nghĩa Nội dung 2 Tên, Kí hiệu BM 4 Kích thước file ảnh 4 Dự trữ (Không dùng) 0 4 Byte offset in file where image begin (Kích thước vùng Information và Header) 54 Windows 3 Bitmap Header 4 Size of this Header 40 4 Image width in pixels 4 Image height in pixels 2 Number of iImage planes, must be 1 2 Bits per pixel 1, 4, 8, 24 4 Compression type (run-length) 0,1,2 4 Size in byte of compressed image, or 0 4 Horizontal resolution, in pixels/meter 4 Vertical resolution, in pixels/meter 4 Number of colors used 4 Number of “important” colors 4*n Colors palette IV. Chương trình minh hoạ đọc ảnh BMP 256 màu Sơ đồ Chương trình minh hoạ chỉ đọc ảnh 256 màu. Mở tệp ảnh Đọc 54 byte Header Đọc 256*4 byte Bảng màu Khởi tạo chế độ đồ hoạ Tạo dữ liệu bảng màu Nạp bảng màu Đọc và vẽ các điểm ảnh: Với dòng i:= 1 đến H –dòng ảnh cuối cùng Đọc hết dòng ảnh (W) vào mảng Dg Với cột j:=1 đến W- chiều rộng ảnh Vẽ ở điểm (j, i) với màu Dg[j] Đóng tệp ảnh 2. Các thành phần chính của chương trình minh hoạ Mở tệp ảnh Assign(F, Filename); Reset(F,1); Đọc 54 byte Header BlockRead(F,Header,54); Đọc 256*4 byte Bảng màu BlockRead(F, BM, 256*4); Khởi tạo chế độ đồ hoạ Procedure Setvideo(Mode : Byte); Var R: Registers; Begin R.AH := 0; R.AL := Mode; Intr($10,R); End; Tạo dữ liệu bảng màu For i:= 0 to 255 do Begin PM[i].R:= BM[i].R đẩy xuống 6 bit thấp; PM[i].G:= BM[i].G đẩy xuống 6 bit thấp; PM[i].B:= BM[i].B đẩy xuống 6 bit thấp; End; Nạp bảng màu R.AH:= $10; R.AL:= $12; R.BX:= $00; R.CX:= Số màu; R.ES:= Seg(PM); R.DX:= Ofs(PM); Intr($10,R); Đọc và vẽ các điểm ảnh: For i:=1 to Header.H do BlockRead(F, Dg, Header.W); For j:=1 to Header.W do WritePixel( j, i, Dg[j]); 8. Đóng tệp ảnh Close(F); Một số khai báo chính Header : Record Name : Word; SizeOfFile, Reserve, SizeOfHI : Longint; InfoSize, W, H : Longint; ColorPlanes,BitsPerPixel : Word; Flag, SizeOfImage, HMeter, VMeter : Longint; NumOfColorF, NumOfColorS : Longint; End; BM : Array [0..255] of Record B, G, R, D : Byte; End; PM : Array [0..255] of Record R, G, B : Byte; End; Procedure WritePixel( Col, Row : Integer; Color : Byte ); Var R: Registers; Begin R.AH:=$0C; R.AL:=Color; R.CX:= Col; R.DX:=Row; R.BH:=0; Intr($10,R); End; Bài tập Viết chương trình đọc ảnh BMP 256. Viết chương trình đọc ảnh BMP 16 màu. Viết chương trình đọc ảnh BMP 256, 16 màu hoặc 2 màu. Viết chương trình đọc ảnh BMP 256 màu và thay đổi mức sáng. Viết chương trình đọc ảnh BMP 256 màu và tách từng phần màu Gợi ý 1) Bài tập 3. Chương trình minh hoạ đọc ảnh 16 màu. Mở tệp ảnh Đọc 54 byte Header Số màu := 2Header.BitsPerPixel = 1 SHL Header.BitsPerPixel Đọc (4*Số màu) byte Bảng màu Khởi tạo chế độ đồ hoạ Tạo dữ liệu bảng màu Nạp bảng màu Đọc và vẽ các điểm ảnh: Số điểm ảnh trong một byte (SDA) = (8 div Header.BitsPerPixel) Số byte trên một dòng ảnh (SBD) = (Header.W div SDA) Nếu (Header.W mod SDA)0 thì SBD := SBD + 1; MASK := Số màu -1 For i:= 1 to Header.H BlockRead(F, Dg, SBD) For j:= 1 to SBD Dùng byte (B = Dg[j]) vẽ SDA điểm ảnh kể từ vị trí (j-1)*SDA For t := 0 to SDA-1 WritePixel( (j-1)*SDA + t, i, B and MASK) B := B SHR Header.BitsPerPixel B and MASK để lấy ra Header.BitsPerPixel bit cuối của byte B. 2) Bài tập 5. Nếu là ảnh xám Để tăng mức sáng, có thể tăng đều mức sáng của các điểm ảnh. Thay thế cho WritePixel(j, i, D[j]) là WritePixel(j, i, D[j] + k), trong đó k là giá trị tăng. Nếu ảnh màu Với ảnh màu, Dg[j] là số hiệu màu của điểm ảnh ở vị trí (j, i), vì thế không thể thực hiện bằng cách tăng giá trị D[j]. Đặt b = D[j]. Giá trị các thành phần màu của điểm (j, i) là PM [b]. R, PM [b]. G, PM [b]. B Có thể tăng cường độ của điểm ảnh này bằng Round(k*PM [b]. R), Round(k*PM [b]. G), Round(k*PM [b]. B) với k>1.

Các file đính kèm theo tài liệu này:

  • docFile ảnh BMP.doc
Tài liệu liên quan