Tài liệu File ảnh PCX: File ảnh PCX
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 PCX như hình vẽ sau:
Hình 1. Cấu trúc file ảnh PCX
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
Dữ liệu mỗi điểm ảnh chiếm 1 byte, chỉ số hiệu màu của điểm ảnh này. 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, 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.
Dữ liệu được nén theo thuật toán RUN_LENGTH với 2 bit cao làm cờ
ảnh 16 màu
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ả.
Dữ liệu ảnh được mã hoá theo mặt phẳng bit, sau đó nén theo thuật toán RUN-LENGTH với 2 bit cao làm cờ.
Color Palette (Bảng màu)
ảnh 24 bit: Tệp ảnh không có bảng màu
ảnh 256 màu
Bảng màu chiếm 256*3=768 byte, được đặt ở cuố...
4 trang |
Chia sẻ: hunglv | Lượt xem: 1570 | Lượt tải: 0
Bạn đang xem nội dung tài liệu File ảnh PCX, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
File ảnh PCX
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 PCX như hình vẽ sau:
Hình 1. Cấu trúc file ảnh PCX
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
Dữ liệu mỗi điểm ảnh chiếm 1 byte, chỉ số hiệu màu của điểm ảnh này. 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, 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.
Dữ liệu được nén theo thuật toán RUN_LENGTH với 2 bit cao làm cờ
ảnh 16 màu
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ả.
Dữ liệu ảnh được mã hoá theo mặt phẳng bit, sau đó nén theo thuật toán RUN-LENGTH với 2 bit cao làm cờ.
Color Palette (Bảng màu)
ảnh 24 bit: Tệp ảnh không có bảng màu
ảnh 256 màu
Bảng màu chiếm 256*3=768 byte, được đặt ở cuối tệp
Mỗi màu được mô tả bởi 3 byte, thể hiện các thành phần: RED, GREEN và BLUE.
Giá trị của các thành phần RED, GREEN và BLUE được lưu trữ ở 6 bit cao.
ảnh 16 màu
Bảng màu chiếm 16*3=48 byte
Mỗi màu được mô tả bởi 3 byte, thể hiện các thành phần: RED, GREEN và BLUE.
Giá trị của các thành phần BLUE, GREEN và RED được lưu trữ ở 6 bit cao.
Không phụ thuộc vào số lượng màu, 48 byte của bảng 16 màu luôn có mặt trong phần Header.
III. Header
Header của các tệp ảnh PCX gồm 54 byte, được mô tả chi tiết trong bảng sau:
File Header
Số bytes
ý nghĩa
Nội dung
1
Sign
10
1
Version
1
Encode
1
BitsPerPixel
4
X1,Y1 above-left co-ordinates of image
4
X2,Y2 below-right co-ordinates of image
2
Horizontal Discrimination (meter)
2
Vertical Discrimination (meter)
48
Color Palette of 16 colors
1
Video Mode
1
Number of bit’s plane
2
Number of bytes per line (after encode bits planes)
60
Unused
IV. Chương trình minh hoạ đọc ảnh PCX 256 màu
Sơ đồ
Chương trình minh hoạ chỉ đọc ảnh 256 màu.
Mở tệp ảnh
Đọc 128 byte Header; DataPos := FilePos(F);
Seeek(F,FileSize(F)-768); Đọc 768 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:
Seek(F,DataPos);
Số điểm ảnh trên dòng := Số mặt phẳng bit * Số byte trên dòng;
For i:= Header.Y1 to Header.Y2
L:=0;
While L < Số điểm ảnh trên dòng Do
Đọc dữ liệu vào byte B nếu chưa hết tệp;
If B >= 192 then
SLL := B- 192;
Đọc tiếp dữ liệu vào byte B;
Else SLL:=1;
For i:=0 to SLL -1 do PL[SLL+i]:=B;
SLL = L + SLL;
For j:=Header.X1 to Header.X2 Vex(j, i, PL[j]);
Đóng tệp ảnh
2. Một số khai báo chính
Header : Record
Sign,Version,Encode,BitPerPixel : Byte;
X1,Y1,X2,Y2, Hres,Vres : Integer;
Palette : Array [0..15,1..3] of Byte;
Vmode, Planes : Byte;
BytesPerLine : Integer;
Unused : Array [1..60] of Byte;
End;
Giải nén theo RUN_LENGTH
Số điểm ảnh trên dòng := Số mặt phẳng bit * Số byte trên dòng;
L:=0;
While L < Số điểm ảnh trên dòng Do
Đọc dữ liệu vào byte B nếu chưa hết tệp;
If B >= 192 then
SLL := B- 192;
Đọc tiếp dữ liệu vào byte B;
Else SLL:=1;
For i:=1 to SLL do PL[L+i]:=B;
L = L + SLL;
Giải mã BIT_PLANE:
If (Số mặt phẳng bit =1) Then PC:=PL
If Số mặt phẳng bit >1
For bit:=0 To Số mặt phẳng bit -1 Do
doan := bit*Số byte trên dòng;
For t:=0 to Số byte trên dòng-1 do
* B:=PL[doan+t];
* For i:=0 to 7 do
If (bit 7-i của B là 1) Then PC[8*t+i]:= PC[8*t+i] + (2 mũ i);
124,214,56,157,198,212,202,12
124, 56,56,...,56,157,212,...,212,12,12,...,12
x1, x2, x3, ..., xn
l1,d1,l2,d2,..., lk,dk
255,127
Các file đính kèm theo tài liệu này:
- File ảnh PCX.doc