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 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. 2. ả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ờ 3. ả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ờ.

doc4 trang | Chia sẻ: tlsuongmuoi | Ngày: 17/01/2013 | Lượt xem: 1340 | Lượt tải: 1download
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:

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