1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc file ảnh BMP

8 3K 48

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 508,5 KB

Nội dung

Cấu trúc file ảnh BMP Xử lý ảnh số

Trang 1

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:

I Data of Image

1 ảnh 24 bit

• Mỗi điểm ảnh chiếm 3 byte mô tả ba thành phần: Red, Green, Blue

Hình 1 Cấu trúc file ảnh BMP

Trang 2

2 ả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

3 ả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

4 ả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

II Color Palette (Bảng màu)

5 ảnh 24 bit: Tệp ảnh không có bảng màu

6 ả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 lu trữ ở 6 bit cao

Blue Green Red Darkgra

y

Red Green Blue

Blue Green Red Darkgra

y Blue Green Red Darkgra

y

Trang 3

Blue Green Red Darkgra

y

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

4 Kích thớc file ảnh

4 Byte offset in file where image begin (Kích thớc

vùng Information và Header)

54

Windows 3 Bitmap Header

4 Image width in pixels

4 Image height in pixels

2 Number of iImage planes, must be 1

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

1 Sơ đồ

Chơng trình minh hoạ chỉ đọc ảnh 256 màu

1 Mở tệp ảnh

2 Đọc 54 byte Header

3 Đọc 256*4 byte Bảng màu

4 Khởi tạo chế độ đồ hoạ

5 Tạo dữ liệu bảng màu

6 Nạp bảng màu

Trang 4

7 Đọc và vẽ các điểm ảnh:

Với dòng i:= 1 đến H –dòng ảnh cuối cùng

a Đọc hết dòng ảnh (W) vào mảng Dg

b Với cột j:=1 đến W- chiều rộng ảnh

Vẽ ở điểm (j, i) với màu Dg[j]

8 Đóng tệp ảnh

2 Các thành phần chính của chơng trình minh hoạ

1 Mở tệp ảnh Assign(F, Filename);Reset(F,1);

2 Đọc 54 byte Header BlockRead(F,Header,54);

3 Đọc 256*4 byte Bảng màu BlockRead(F, BM, 256*4);

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;

5 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;

6 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);

7 Đọ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);

Trang 5

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;

Trang 6

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;

Trang 7

Bài tập

1 Viết chơng trình đọc ảnh BMP 256

2 Viết chơng trình đọc ảnh BMP 16 màu

3 Viết chơng trình đọc ảnh BMP 256, 16 màu hoặc 2 màu

4 Viết chơng trình đọc ảnh BMP 256 màu và thay đổi mức sáng

5 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

1 Mở tệp ảnh

2 Đọc 54 byte Header

Số màu := 2Header.BitsPerPixel

= 1 SHL Header.BitsPerPixel

3 Đọc (4*Số màu) byte Bảng màu

4 Khởi tạo chế độ đồ hoạ

5 Tạo dữ liệu bảng màu

6 Nạp bảng màu

7 Đọc và vẽ các điểm ảnh:

1 Số điểm ảnh trong một byte (SDA) = (8 div Header.BitsPerPixel)

Trang 8

2 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

a BlockRead(F, Dg, SBD)

b 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

a 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

b 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

Ngày đăng: 02/04/2014, 00:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w