aspose.info
TH

BMP - รูปแบบไฟล์รูปภาพ

อัปเดตเมื่อ

ไฟล์ BMP คืออะไร??

ไฟล์ที่มีนามสกุล .BMP แสดงถึงไฟล์รูปภาพบิตแมปที่ใช้ในการเก็บภาพดิจิทัลบิตแมป รูปภาพเหล่านี้ไม่ขึ้นกับอะแดปเตอร์กราฟิกและเรียกอีกอย่างว่ารูปแบบไฟล์บิตแมป (DIB) ที่ไม่ขึ้นกับอุปกรณ์ ความเป็นอิสระนี้มีจุดประสงค์ในการเปิดไฟล์บนหลายแพลตฟอร์ม เช่น Microsoft Windows และ Mac รูปแบบไฟล์ BMP สามารถจัดเก็บข้อมูลเป็นภาพดิจิตอลสองมิติทั้งในรูปแบบขาวดำและรูปแบบสีที่มีความลึกของสีต่างๆ

ข้อมูลจำเพาะรูปแบบไฟล์ BMP

บิตแมปที่ไม่ขึ้นกับอุปกรณ์ทำหน้าที่เป็นตัวช่วยในการแลกเปลี่ยนบิตแมประหว่างอุปกรณ์และแอปพลิเคชัน เนื่องจากการพัฒนาอย่างต่อเนื่องของรูปแบบไฟล์นี้ ข้อมูลที่อยู่ในส่วนหัวอาจแตกต่างกันไปตามเวอร์ชันของบิตแมป ไฟล์บิตแมปเดียวประกอบด้วยโครงสร้างขนาดคงที่และขนาดตัวแปรในลำดับเฉพาะ

โครงสร้างในไฟล์ Bitmap จัดเรียงตามลำดับต่อไปนี้:

โครงสร้างทางเลือกขนาดวัตถุประสงค์
ส่วนหัวของไฟล์ไม่14เพื่อเก็บข้อมูลทั่วไปเกี่ยวกับไฟล์ภาพบิตแมป
DIB HeaderNoFixed-Sizeเพื่อเก็บข้อมูลโดยละเอียดเกี่ยวกับภาพบิตแมปและกำหนดรูปแบบพิกเซล
มาสก์บิตพิเศษใช่12 หรือ 16 ไบต์เพื่อกำหนดรูปแบบพิกเซล
จานสีกึ่งทางเลือกขนาดตัวแปรเพื่อกำหนดสีที่ใช้โดยข้อมูลภาพบิตแมป
Gap1ใช่ขนาดตัวแปรการจัดตำแหน่งโครงสร้าง
Pixel ArrayNoVariable-sizePixel format กำหนดโดย DIB header หรือ Extra bit masks
Gap2ใช่ขนาดตัวแปรการจัดตำแหน่งโครงสร้าง
โปรไฟล์สี ICCใช่ขนาดตัวแปรเพื่อกำหนดโปรไฟล์สีสำหรับการจัดการสี

เมื่ออิมเมจบิตแมปถูกโหลดลงในหน่วยความจำ ภาพนั้นจะกลายเป็นโครงสร้าง DIB ซึ่งใช้โดย Windows ผ่าน GDI API ส่วนหัวของไฟล์ไม่ได้เป็นส่วนหนึ่งของโครงสร้างข้อมูลนี้ สียังสามารถประกอบด้วยรายการ 16 บิตที่เป็นดัชนีของจานสีที่อ้างอิงในปัจจุบัน แทนที่จะเป็นคำจำกัดความสี RGB ที่ชัดเจน มาดูรายละเอียดบางส่วนเหล่านี้โดยเฉพาะส่วนหัว

ส่วนหัวของไฟล์บิตแมป

ส่วนหัวของไฟล์บิตแมปคล้ายกับส่วนหัวของไฟล์อื่นๆ ที่ใช้ในการระบุไฟล์ เนื่องจากมีรูปแบบไฟล์ BMP ที่แตกต่างกัน 2 ไบต์แรกของรูปแบบไฟล์ BMP คืออักขระ “B” และอักขระ “M” ในการเข้ารหัส ASCII ค่าจำนวนเต็มทั้งหมดจะถูกจัดเก็บในรูปแบบ little-endian

ออฟเซ็ต hexออฟเซ็ต ธันวาคมขนาดวัตถุประสงค์
0002 ไบต์ฟิลด์ส่วนหัวที่ใช้ในการระบุไฟล์ BMP และ DIB คือ 0x42 0x4D ในเลขฐานสิบหก เช่นเดียวกับ BM ใน ASCII สามารถตามค่าที่เป็นไปได้* BM – Windows 3.1x, 95, NT, … etc. * BA – OS/2 struct bitmap array * CI – OS/2 struct ไอคอนสี * CP – ตัวชี้สี OS/2 const * IC – ไอคอนโครงสร้าง OS/2 * PT – ตัวชี้ OS/2
0224 ไบต์ขนาดของไฟล์ BMP เป็นไบต์
0662 ไบต์สงวน; ค่าจริงขึ้นอยู่กับแอปพลิเคชันที่สร้างภาพ
0882 ไบต์สงวน; ค่าจริงขึ้นอยู่กับแอปพลิเคชันที่สร้างภาพ
0A104 ไบต์ออฟเซ็ต เช่น ที่อยู่เริ่มต้นของไบต์ที่สามารถพบข้อมูลภาพบิตแมป (อาร์เรย์พิกเซล)

ส่วนหัว DIB (ส่วนหัวข้อมูลบิตแมป)

ข้อมูลโดยละเอียดเกี่ยวกับรูปภาพจะแสดงด้วยส่วนหัวนี้ จากข้อมูลนี้ แอปพลิเคชันจะถูกกำหนดว่าจะใช้เพื่อแสดงภาพบนหน้าจอ ส่วนหัวดังกล่าวทั้งหมดมีฟิลด์ DWORD (32 บิต) ซึ่งระบุขนาด เพื่อให้แอปพลิเคชันสามารถระบุส่วนหัวที่ใช้ในรูปภาพได้อย่างง่ายดาย นี่เป็นเพราะความจริงที่ว่ารูปแบบ DIB ได้รับส่วนขยายหลายรายการ ต่อไปนี้คือส่วนหัวของ DIB พร้อมฟิลด์ที่อยู่ในรายการ

จานสี

จานสี BMP เป็นอาร์เรย์ของโครงสร้างที่ระบุค่าความเข้ม RGB ของแต่ละสีในจานสีของอุปกรณ์แสดงผล แต่ละพิกเซลในข้อมูลบิตแมปจะเก็บค่าเดียวที่ใช้เป็นดัชนีในจานสี ข้อมูลสีที่จัดเก็บไว้ในองค์ประกอบที่ดัชนีนั้นระบุสีของพิกเซลนั้น ความพร้อมใช้งานของสีในไฟล์บิตแมปแตกต่างกันไปดังนี้:

  • หนึ่ง 4 และ 8 บิต - คาดว่าจะประกอบด้วยจานสีเสมอ
  • สิบหก 24 และ 32 บิต - ไม่มีจานสี
  • ไฟล์ BMP สิบหกและ 32 บิต - มีค่ามาสก์บิตฟิลด์แทนที่จานสี

การจัดเก็บพิกเซล

บิตแมปพิกเซลจะถูกจัดเก็บเป็นบิตที่บรรจุในแถว โดยขนาดของแต่ละแถวจะถูกปัดเศษขึ้นเป็นทวีคูณของ 4 ไบต์ (DWORD แบบ 32 บิต) โดยการเติม ไม่สามารถคำนวณจำนวนไบต์ทั้งหมดที่ต้องใช้ในการจัดเก็บพิกเซลของรูปภาพได้โดยตรงโดยการนับจำนวนบิต เนื่องจากมีช่องว่างภายในเข้ามาเกี่ยวข้อง จึงจำเป็นต้องปัดเศษขึ้นขนาดของแต่ละแถวเป็นทวีคูณของ 4 ไบต์ ไบต์ที่เติม (ไม่จำเป็นต้องเป็น 0) จะต้องต่อท้ายแถวเพื่อให้ความยาวของแถวเพิ่มเป็นทวีคูณของสี่ไบต์ เมื่อโหลดอาร์เรย์พิกเซลลงในหน่วยความจำ แต่ละแถวต้องเริ่มต้นที่แอดเดรสหน่วยความจำที่มีผลคูณของ 4

รูปภาพได้รับการอธิบายโดยการแสดง DWORDs แบบ 32 บิตของอาร์เรย์พิกเซล โดยปกติแล้วพิกเซลจะถูกจัดเก็บ “จากล่างขึ้นบน” โดยเริ่มจากมุมซ้ายล่าง จากซ้ายไปขวา จากนั้นจึงเรียงแถวจากล่างขึ้นบนของภาพ รูปแบบพิกเซลและความหมายของพวกมันมีดังต่อไปนี้:

  • รูปแบบ 1 บิตต่อพิกเซล (1bpp) รองรับ 2 สีที่แตกต่างกัน (เช่น: ขาวดำ)
  • รูปแบบ 2 บิตต่อพิกเซล (2bpp) รองรับ 4 สีที่แตกต่างกัน และจัดเก็บ 4 พิกเซลต่อ 1 ไบต์ พิกเซลซ้ายสุดอยู่ในสองบิตที่สำคัญที่สุด ค่าพิกเซลแต่ละค่าเป็นดัชนี 2 บิตในตารางที่มีสีสูงสุด 4 สี
  • รูปแบบ 4 บิตต่อพิกเซล (4bpp) รองรับสีที่แตกต่างกัน 16 สี และจัดเก็บ 2 พิกเซลต่อ 1 ไบต์ พิกเซลซ้ายสุดจะอยู่ในแทะที่มีนัยสำคัญมากกว่า ค่าพิกเซลแต่ละค่าเป็นดัชนี 4 บิตในตารางที่มีสีสูงสุด 16 สี
  • รูปแบบ 8 บิตต่อพิกเซล (8bpp) รองรับสีที่แตกต่างกัน 256 สี และจัดเก็บ 1 พิกเซลต่อ 1 ไบต์ แต่ละไบต์เป็นดัชนีในตารางที่มีสีมากถึง 256 สี
  • รูปแบบ 16 บิตต่อพิกเซล (16bpp) รองรับสีที่แตกต่างกัน 65536 สี และจัดเก็บ 1 พิกเซลต่อ 2 ไบต์ WORD แต่ละคำสามารถกำหนดตัวอย่างอัลฟา แดง เขียว และน้ำเงินของพิกเซล
  • รูปแบบพิกเซล 24 บิต (24bpp) รองรับสีที่แตกต่างกัน 16,777,216 สี และเก็บค่า 1 พิกเซลต่อ 3 ไบต์ ค่าพิกเซลแต่ละค่ากำหนดตัวอย่างสีแดง สีเขียว และสีน้ำเงินของพิกเซล (8.8.8.0.0 ในรูปแบบ RGBAX) โดยเฉพาะอย่างยิ่ง ตามลำดับ: สีน้ำเงิน สีเขียว และสีแดง (8 บิตต่อตัวอย่างแต่ละตัวอย่าง)
  • รูปแบบ 32 บิตต่อพิกเซล (32bpp) รองรับสีที่แตกต่างกัน 4,294,967,296 สี และจัดเก็บ 1 พิกเซลต่อ DWORD 4 ไบต์ DWORD แต่ละรายการสามารถกำหนดตัวอย่างอัลฟา สีแดง สีเขียว และสีน้ำเงินของพิกเซลได้

อ้างอิง

ดูเพิ่มเติม