intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Cấu trúc ảnh BMP

Chia sẻ: Asg Ahsva | Ngày: | Loại File: PDF | Số trang:7

137
lượt xem
16
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

ả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  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ố...

Chủ đề:
Lưu

Nội dung Text: Cấu trúc ảnh BMP

  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 c hó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Ï s au: H×nh 1. CÊu tróc file ¶nh BMP 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  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, g i¸ trÞ mçi ®iÓm ¶nh chØ cÇn 4 bit ®Ó m« t¶.  H ai ®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 b it thÊp.
  2.  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¸ t r Þ 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 t hÊp. VÝ dô, byte b = 217 (11011001) chøa d÷ liÖu cña 8 ®iÓm ¶nh cã gi¸ t rÞ l Çn l­ît lµ 1, 1, 0,1, 1, 0, 0 vµ 1. I I. Color Palette (B¶ng mµu) 1 . ¶ nh 24 bit: T Öp ¶nh kh«ng cã b¶ng mµu 2 . ¶ 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, G REEN, RED vµ DAR KGRAY.  V íi hÇu hÕt c¸c tÖp ¶nh BMP, thµnh phÇn DARKGRAY b»ng 0.  G i¸ trÞ cña c¸c thµnh phÇn BLUE, GREEN vµ RED ®­îc l­u tr÷ ë 6 bit cao. B lue G reen R ed D arkgray R ed Green B lue B lue G reen R ed D arkgray B lue G reen R ed D arkgray B lue G reen R ed D arkgray I II. 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 B yte offset in file where im age begin (KÝch th­íc 54 v ïng Information vµ Header) W indows 3 Bitmap Header 4 S ize of this Header 40
  3. 4 I mage width in pixels 4 I mage height in pixels 2 N umber of iImage planes, must be 1 2 B its per pixel 1 , 4, 8, 24 4 C ompression type (run - leng th) 0 ,1,2 4 S ize in byte of compressed image, or 0 4 H orizontal resolution, in pixels/meter 4 V ertical resolution, in pixels/meter 4 N umber of colors used 4 N umber of “important” colors 4 *n C olors palette I V. Ch­¬ng tr×nh minh ho¹ ®äc ¶nh BMP 256 mµu 1. S ¬ ®å C h­¬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. K hë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: 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 - c hiÒ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 A ssign(F, Filename); Reset(F,1); 2. §äc 54 byte Header B lockRead(F,Header,54); 3. §äc 256*4 byte B¶ng mµ u B lockRead(F, BM, 256*4); 4. Khëi t¹o chÕ ®é ®å ho¹ P rocedure Setvideo(Mode : Byte); V ar R: Registers; B egin R .AH := 0; R .AL := Mode; I ntr($10,R); E nd;
  4. 5 . T¹o d÷ liÖu b¶ng mµu F or i:= 0 to 255 do B egin P M[i].R:= B M[i].R ®Èy xuèng 6 bit thÊp; P M [i].G:= B M[i].G ®Èy xuèng 6 bit thÊp; P M[i].B:= B M[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); I ntr($10,R); 7 . §äc vµ vÏ c¸c ®iÓm ¶n h: F or i:=1 to Header.H do B lockRead(F, Dg, Header.W); F or 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 N ame : W ord; S izeOfFi le, Reserve, SizeOfHI : L ongint; I nfoSize, W, H : L ongint; C olorPlanes,BitsPerPixel : W ord; F lag, SizeOfImage, HMeter, VMeter : L ongint; N umOfColorF, NumOfColorS : L ongint; E nd; BM : Array [0..255] of Record B, G, R, D : B yte; End; PM : Array [0..255] of Record R, G, B : B yte; End;
  5. P rocedure WritePixel( Col, Row : Integer; Color : Byte ); Var R: Registers; Begin R .AH:=$0C; R .A L:=Color; R .CX:= Col; R .DX:=Row; R .BH:=0; I ntr($10,R); End;
  6. 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. C h­¬ng tr×nh minh ho¹ ®äc ¶nh 16 mµu. 1. M ë tÖp ¶nh 2. §äc 54 byte Header 2Header.BitsPerPixel S è mµu := = 1 S HL Header.BitsPerPixel 3. §äc (4*Sè mµu) byte B¶ng mµu 4. K hë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) 2. S è byte trªn mét dßng ¶nh (SBD) = ( Header.W div SDA)
  7. N Õu (Header.W mod SDA)0 th× S BD := SBD + 1;  M ASK := Sè mµu - 1 F or i := 1 to Header.H a . B lockRead(F, Dg, SBD) b . F or j:= 1 to SBD D ïng byte (B = Dg[j]) vÏ SDA ®iÓm ¶nh kÓ tõ vÞ trÝ ( j - 1)*SDA F or t := 0 to SDA - 1  W ritePixel( (j - 1)*SDA + t, i, B a nd MASK )  B : = B SHR Header.BitsPerPixel B and MASK ®Ó lÊy ra Header.BitsPerP ixel 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Õ c ho W ritePixel(j, i, D[j]) l µ W ritePixel(j, i, D[j] + k), t rong ®ã 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 t hÓ 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µ P M [b]. R, PM [b]. G, PM [b]. B Cã thÓ t¨ng c­êng ®é cña ®iÓm ¶nh nµy b»ng R ound(k*PM [b]. R), Round(k*P M [b]. G), Round(k*PM [b]. B) v íi k>1.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0