กลับไปหน้าบทความ

อ่าน 8 นาที

รูปแบบไฟล์ BMP

รูป แบบไฟล์ BMP หรือ บิตแมป เป็น รูปแบบไฟล์ ภาพกราฟิกแรสเตอร์ ที่ใช้ในการจัดเก็บ ภาพดิจิทัล บิตแมป โดยไม่ขึ้นอยู่กับ อุปกรณ์แสดงผล (เช่น อะ แดปเตอร์กราฟิก )...

รูปแบบไฟล์ BMP

วินโดว์ บิตแมป
นามสกุลไฟล์
.bmp,.dib
สื่อประเภทอินเทอร์เน็ตimage/bmp[ 1 ]image/x-bmp
รหัสประเภท'BMP ''BMPf''BMPp'
ตัวระบุประเภทมาตรฐาน (UTI)com.microsoft.bmp
พัฒนาโดยบริษัท ไมโครซอฟต์
ประเภทของรูปแบบกราฟิกแรสเตอร์
รูปแบบเปิด ?OSPสำหรับWMF

รูปแบบไฟล์ BMPหรือบิตแมปเป็นรูปแบบไฟล์ภาพกราฟิกแรสเตอร์ ที่ใช้ในการจัดเก็บภาพดิจิทัลบิตแมปโดยไม่ขึ้นอยู่กับอุปกรณ์แสดงผล (เช่น อะแดปเตอร์กราฟิก ) โดยเฉพาะในระบบปฏิบัติการ Microsoft Windows [ 2 ]และOS/2 [ 3 ]

รูปแบบไฟล์ BMP สามารถจัดเก็บภาพดิจิทัลสองมิติ ที่มี ความลึกสี ต่างๆ ได้ และอาจมี การบีบ อัดข้อมูลช่องอัลฟาและโปรไฟล์สีเพิ่มเติม ข้อกำหนด Windows Metafile (WMF) ครอบคลุมรูปแบบไฟล์ BMP [ 4 ]

บิตแมปที่ไม่ขึ้นกับอุปกรณ์และรูปแบบไฟล์ BMP

แผนภาพที่ 1 – โครงสร้างของไฟล์ภาพบิตแมป
แผนภาพที่ 1 – โครงสร้างของไฟล์ภาพบิตแมป

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

ตามการสนับสนุนของ Microsoft: [ 5 ]

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

ส่วนต่อไปนี้จะกล่าวถึงข้อมูลที่จัดเก็บในไฟล์ BMP หรือ DIB โดยละเอียด นี่คือรูปแบบไฟล์ BMP มาตรฐาน[ 5 ]แอปพลิเคชันบางตัวสร้างไฟล์ภาพบิตแมปที่ไม่สอดคล้องกับเอกสารของ Microsoft นอกจากนี้ ฟิลด์บางฟิลด์ไม่ได้ถูกใช้งาน ค่า 0 จะถูกพบในฟิลด์ที่ไม่ได้ใช้งานเหล่านี้

โครงสร้างไฟล์

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

จากแผนภาพที่ 1 ไฟล์บิตแมปประกอบด้วยโครงสร้างตามลำดับดังต่อไปนี้:

ชื่อโครงสร้าง ไม่จำเป็น ขนาด (ไบต์) วัตถุประสงค์ ความคิดเห็น
ส่วนหัวของไฟล์บิตแมป เลขที่ 14 ข้อมูลทั่วไป ไม่จำเป็นอีกต่อไปหลังจากโหลดไฟล์ลงในหน่วยความจำแล้ว
ส่วนหัว DIB เลขที่ ขนาดคงที่(มีให้เลือก 7 แบบ) ข้อมูลโดยละเอียดและรูปแบบพิกเซล ต่อจากส่วนหัวของไฟล์ Bitmap ทันที
หน้ากากบิตเพิ่มเติม ใช่ 12 หรือ 16 รูปแบบพิกเซล จะปรากฏเฉพาะในกรณีที่ส่วนหัวของไฟล์ DIB คือBITMAPINFOHEADERและสมาชิก Compression Method ถูกตั้งค่าเป็น BI_BITFIELDS หรือ BI_ALPHABITFIELDS เท่านั้น
ตารางสี พึ่งพา แตกต่างกันไป สี (อาร์เรย์พิกเซล) จำเป็นสำหรับความลึกของสี ≤ 8 บิต
ช่องว่าง 1 ใช่ แตกต่างกันไป การจัดเรียงโครงสร้าง สิ่งผิดปกติของอาร์เรย์ค่าชดเชยไฟล์เป็นพิกเซลในส่วนหัวของไฟล์บิตแมป
อาร์เรย์พิกเซล เลขที่ แตกต่างกันไป ค่าพิกเซล รูปแบบพิกเซลถูกกำหนดโดยส่วนหัว DIB หรือบิตมาสก์เพิ่มเติม แต่ละแถวในอาร์เรย์พิกเซลจะถูกเติมให้มีขนาดเป็นจำนวนเท่าของ 4 ไบต์
แก๊ป2 ใช่ แตกต่างกันไป การจัดเรียงโครงสร้าง ร่องรอยของฟิลด์ออฟเซ็ตข้อมูลโปรไฟล์ ICC ในส่วนหัว DIB
โปรไฟล์สี ICC ใช่ แตกต่างกันไป โปรไฟล์สี (สำหรับการจัดการสี) นอกจากนี้ยังสามารถมีเส้นทางไปยังไฟล์ภายนอกที่มีโปรไฟล์สี เมื่อโหลดในหน่วยความจำเป็น "DIB ที่ไม่ได้บรรจุ" จะอยู่ระหว่างตารางสีและ Gap1 [ 6 ]

DIB ในหน่วยความจำ

ไฟล์ภาพบิตแมปที่โหลดลงในหน่วยความจำจะกลายเป็นโครงสร้างข้อมูล DIB ซึ่งเป็นส่วนประกอบสำคัญของ Windows GDI API โครงสร้างข้อมูล DIB ในหน่วยความจำนั้นเกือบจะเหมือนกับรูปแบบไฟล์ BMP แต่ไม่มีส่วนหัวไฟล์บิตแมปขนาด 14 ไบต์ และเริ่มต้นด้วยส่วนหัว DIB สำหรับ DIB ที่โหลดลงในหน่วยความจำ ตารางสีอาจประกอบด้วยรายการ 16 บิตที่ประกอบเป็นดัชนีไปยังจานสีที่รับรู้ในปัจจุบัน[ 7 ] (ระดับการอ้างอิงเพิ่มเติม) แทนที่จะเป็นการกำหนดสี RGB อย่างชัดเจน ในทุกกรณี อาร์เรย์พิกเซลต้องเริ่มต้นที่ที่อยู่หน่วยความจำที่เป็นพหุคูณของ 4 ไบต์ ใน DIB ที่ไม่ได้บรรจุซึ่งโหลดลงในหน่วยความจำ ข้อมูลโปรไฟล์สีเสริมควรอยู่ถัดจากตารางสีทันทีและก่อน gap1 และอาร์เรย์พิกเซล[ 6 ] (ต่างจากในแผนภาพที่ 1)

เมื่อขนาดของ gap1 และ gap2 เป็นศูนย์ โครงสร้างข้อมูล DIB ในหน่วยความจำมักจะเรียกว่า "packed DIB" และสามารถอ้างอิงได้ด้วยตัวชี้เดียวที่ชี้ไปยังจุดเริ่มต้นของส่วนหัว DIB ในทุกกรณี อาร์เรย์พิกเซลต้องเริ่มต้นที่ที่อยู่หน่วยความจำที่เป็นพหุคูณของ 4 ไบต์ ในบางกรณี อาจจำเป็นต้องปรับจำนวนรายการในตารางสีเพื่อบังคับให้ที่อยู่หน่วยความจำของอาร์เรย์พิกเซลเป็นพหุคูณของ 4 ไบต์[ 7 ] สำหรับ "packed DIBs" ที่โหลดในหน่วยความจำ ข้อมูลโปรไฟล์สีเสริมควรตามหลังอาร์เรย์พิกเซลทันที ดังที่แสดงในแผนภาพที่ 1 (โดย gap1=0 และ gap2=0) [ 6 ] "Packed DIBs" จำเป็นสำหรับ ฟังก์ชัน API คลิปบอร์ด ของ Windowsเช่นเดียวกับฟังก์ชันแปรงและทรัพยากรแบบมีรูปแบบของ Windows บางฟังก์ชัน[ 8 ]

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

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

ออฟเซ็ต (ไบต์) ขนาด (ไบต์) คำอธิบาย
0 2 ส่วนหัวของไฟล์ BMP และ DIB นั้นอยู่0x42 0x4Dใน รูป แบบเลขฐานสิบหกเช่นเดียวกับBMใน ASCII โดยมีค่าที่เป็นไปได้ดังต่อไปนี้:
บีเอ็ม
Windows 3.1x, 95, NT, ... เป็นต้น
บีเอ
โครงสร้างบิตแมปอาร์เรย์ OS/2
ซีไอ
ไอคอนสีโครงสร้าง OS/2
ซีพี
ตัวชี้สีคงที่ OS/2
ไอซี
ไอคอนโครงสร้าง OS/2
พีที
ตัวชี้ OS/2
2 4 ขนาดของไฟล์ BMP ในหน่วยไบต์
6 2 สงวนไว้; ค่าจริงขึ้นอยู่กับแอปพลิเคชันที่สร้างภาพ หากสร้างด้วยตนเอง ค่าอาจเป็น 0
8 2 สงวนไว้; ค่าจริงขึ้นอยู่กับแอปพลิเคชันที่สร้างภาพ หากสร้างด้วยตนเอง ค่าอาจเป็น 0
10 4 ค่าออฟเซ็ต หรือที่อยู่เริ่มต้นของไบต์ที่สามารถพบข้อมูลภาพบิตแมป (อาร์เรย์พิกเซล) ได้

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

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

ส่วนหัวบิตแมปของ Windows และ OS/2
ขนาด (ไบต์) ชื่อส่วนหัว การสนับสนุนระบบปฏิบัติการ คุณสมบัติ เขียนโดย
12 BITMAPCOREHEADER OS21XBITMAPHEADERWindows 2.0หรือเวอร์ชันที่ใหม่กว่าOS/2 1.x [ 3 ]
64 OS22XBITMAPHEADEROS/2 บิตแมปคอร์เฮดเดอร์ 2 เพิ่มเอฟเฟ็กต์ฮาล์ฟโทนเพิ่ม การบีบอัด RLEและHuffman 1D
16 OS22XBITMAPHEADERรูปแบบนี้ของส่วนหัวก่อนหน้านี้ประกอบด้วยไบต์ 16 ไบต์แรกเท่านั้น และไบต์ที่เหลือจะถือว่าเป็นค่าศูนย์[ 3 ]

ตัวอย่างกรณีดังกล่าวคือกราฟิกpal8os2v2-16.bmp [ 9 ] ของ BMP Suite [ 10 ]

40 บิตแมปโฟเฮดเดอร์Windows NTเวอร์ชัน3.1xหรือใหม่กว่า[ 2 ]ขยายความกว้างและความสูงของบิตแมปเป็น 4 ไบต์ เพิ่มรูปแบบ 16 บิตต่อพิกเซลและ 32 บิตต่อพิกเซล เพิ่มการบีบอัดแบบ RLE
52 บิตแมปวี2อินโฟเฮดเดอร์ไม่มีเอกสาร เพิ่มบิตมาสก์ RGB ไมโครซอฟต์
56 บิตแมปวี3อินโฟเฮดเดอร์ไม่มีการจัดทำเอกสารอย่างเป็นทางการ แต่เอกสารนี้ถูกโพสต์ในฟอรัมของ Adobe โดยพนักงานของ Adobe พร้อมคำแถลงว่ามาตรฐานดังกล่าวเคยรวมอยู่ในเอกสารอย่างเป็นทางการของ MS ในอดีต[ 11 ]เพิ่มบิตมาสก์ ช่องอัลฟาไมโครซอฟต์
108 บิตแมปวี4เฮดเดอร์ระบบปฏิบัติการ Windows NT 4.0 , 95หรือเวอร์ชันที่ใหม่กว่า เพิ่มประเภทพื้นที่สีและการแก้ไขแกมมา
124 BITMAPV5HEADERระบบปฏิบัติการ Windows NT 5.0 , 98หรือเวอร์ชันที่ใหม่กว่า เพิ่มโปรไฟล์สี ICCจีเอ็มพี
ออฟเซ็ต (ไบต์) ขนาด (ไบต์) OS/2 1.x BITMAPCOREHEADER [ 3 ]
14 4 ขนาดของส่วนหัวนี้ (12 ไบต์)
18 2 ความกว้างของภาพบิตแมปในหน่วยพิกเซล (16 บิตแบบไม่ระบุเครื่องหมาย)
20 2 ความสูงของภาพบิตแมปในหน่วยพิกเซล (16 บิตแบบไม่ระบุเครื่องหมาย)
22 2 จำนวนระนาบสีต้องมี 1
24 2 จำนวนบิตต่อพิกเซล
ไฟล์ภาพบิตแมปของ OS/2 1.x ไม่มีการบีบอัด และไม่สามารถเป็น 16 หรือ 32 บิตต่อพิกเซลได้

BITMAPCOREHEADER ของ Windows 2.x แตกต่างจาก BITMAPCOREHEADER ของ OS/2 1.x (แสดงในตารางด้านบน) ในรายละเอียดหนึ่งข้อคือ ฟิลด์ความกว้างและความสูงของภาพเป็นจำนวนเต็มที่มีเครื่องหมาย ไม่ใช่จำนวนเต็มที่ไม่มีเครื่องหมาย[ 12 ]

เวอร์ชันหลังจากBITMAPINFOHEADERจะเพิ่มฟิลด์ต่อท้ายส่วนหัวของเวอร์ชันก่อนหน้าเท่านั้น ตัวอย่างเช่นBITMAPV2INFOHEADERจะเพิ่มฟิลด์ต่อจากBITMAPINFOHEADERและBITMAPV3INFOHEADERจะเพิ่มฟิลด์ต่อจาก BITMAPV2INFOHEADER

มีการนำช่องอัลฟาแบบบูรณาการมาใช้ในBITMAPV3INFOHEADER ที่ไม่ได้ระบุไว้ในเอกสาร และในBITMAPV4HEADER ที่ระบุไว้ในเอกสาร (ตั้งแต่Windows 95 ) และถูกใช้ใน ระบบล็อกอินและธีม ของ Windows XPรวมถึง Microsoft Office (ตั้งแต่เวอร์ชัน 2000) นอกจากนี้ยังรองรับโดย ซอฟต์แวร์ แก้ไขภาพ บางตัว เช่นAdobe Photoshopตั้งแต่เวอร์ชัน 7 และAdobe Flashตั้งแต่เวอร์ชัน MX 2004 (ซึ่งในขณะนั้นรู้จักกันในชื่อ Macromedia Flash) และยังรองรับโดยGIMP , Google Chrome , Microsoft PowerPointและ Microsoft Word อีกด้วย

ด้วยเหตุผลด้านความเข้ากันได้ แอปพลิเคชันส่วนใหญ่จึงใช้ส่วนหัว DIB รุ่นเก่าในการบันทึกไฟล์เนื่องจากระบบปฏิบัติการ OS/2 ไม่ได้รับการสนับสนุนอีกต่อไปหลังจาก Windows 2000 รูปแบบที่ใช้กันทั่วไปใน Windows ในขณะนี้คือส่วนหัวBITMAPINFOHEADERโปรดดูรายละเอียดในตารางถัดไป ค่าทั้งหมดจะถูกจัดเก็บเป็นจำนวนเต็มที่ไม่ติดลบ เว้นแต่จะระบุไว้เป็นอย่างอื่น

ออฟเซ็ต (ไบต์) ขนาด (ไบต์) Windows BITMAPINFOHEADER [ 2 ]
14 4 ขนาดของส่วนหัวนี้เป็นไบต์ (40)
18 4 ความกว้างของภาพบิตแมปในหน่วยพิกเซล (จำนวนเต็มที่มีเครื่องหมาย)
22 4 ความสูงของภาพบิตแมปในหน่วยพิกเซล (จำนวนเต็มที่มีเครื่องหมาย)
26 2 จำนวนระนาบสี (ต้องเป็น 1)
28 2 จำนวนบิตต่อพิกเซล ซึ่งก็คือความลึกของสีในภาพ ค่าทั่วไปคือ 1, 4, 8, 16, 24 และ 32
30 4 วิธีการบีบอัดที่ใช้ ดูตารางถัดไปสำหรับรายการค่าที่เป็นไปได้
34 4 ขนาดของภาพ นี่คือขนาดของข้อมูลบิตแมปดิบ สามารถกำหนดค่า 0 แทนได้สำหรับบิตแมป BI_RGB
38 4 ความละเอียดในแนวนอนของภาพ (พิกเซลต่อเมตร จำนวนเต็มบวกมีเครื่องหมาย)
42 4 ความละเอียดในแนวตั้งของภาพ (พิกเซลต่อเมตร จำนวนเต็มบวกมีเครื่องหมาย)
46 4 จำนวนสีในจานสี หรือ 0 เพื่อตั้งค่าเริ่มต้นเป็น 2 สี
50 4 จำนวนสีสำคัญที่ใช้ หรือ 0 เมื่อทุกสีมีความสำคัญ โดยทั่วไปมักไม่นับรวม

วิธีการบีบอัด (ออฟเซ็ต 30) สามารถเป็นได้ดังนี้:

ค่า ระบุโดย วิธีการบีบอัด ความคิดเห็น
0 BI_RGBไม่มี พบได้บ่อยที่สุด
1 BI_RLE8RLE 8 บิต/พิกเซล ใช้ได้เฉพาะกับภาพบิตแมป 8 บิต/พิกเซลเท่านั้น
2 BI_RLE4RLE 4 บิต/พิกเซล ใช้ได้เฉพาะกับภาพบิตแมป 4 บิต/พิกเซลเท่านั้น
3 BI_BITFIELDSOS22XBITMAPHEADER : Huffman 1D BITMAPV2INFOHEADER : หน้ากากฟิลด์บิต RGB, BITMAPV3INFOHEADER + : RGBA
4 บีไอ_เจพีอีจีOS22XBITMAPHEADER : RLE-24 BITMAPV4INFOHEADER + : รูปภาพ JPEGสำหรับการพิมพ์ [ 13 ]
5 BI_PNGBITMAPV4INFOHEADER + : รูปภาพ PNGสำหรับการพิมพ์ [ 13 ]
6 BI_ALPHABITFIELDSมาสก์ฟิลด์บิต RGBA เฉพาะWindows CE 5.0 ที่มี .NET 4.0 หรือเวอร์ชันที่ใหม่กว่าเท่านั้น
11 บีไอ_ซีมายค์ไม่มี เฉพาะWindows Metafile CMYK [ 4 ]
12 BI_CMYKRLE8อาร์แอลเอ-8 เฉพาะWindows Metafile CMYK เท่านั้น
13 BI_CMYKRLE4อาร์แอลอี-4 เฉพาะWindows Metafile CMYK เท่านั้น

OS/2 2.x OS22XBITMAPHEADER ( BITMAPINFOHEADER2ในเอกสารของ IBM) มีไบต์เพิ่มเติม 24 ไบต์: [ 3 ]

ออฟเซ็ต (ไบต์) ขนาด (ไบต์) OS/2 OS22XBITMAPHEADER ( BITMAPINFOHEADER2 ) [ 3 ]
54 2 ค่าที่ระบุหน่วยสำหรับความละเอียดแนวนอนและแนวตั้ง (ค่าชดเชย 38 และ 42) ค่าที่กำหนดไว้เพียงค่าเดียวคือ 0 ซึ่งหมายถึงพิกเซลต่อเมตร
56 2 ระยะห่าง (Padding) จะถูกละเลยและควรเป็นศูนย์
58 2 ค่าที่กำหนดไว้ซึ่งระบุทิศทางการเติมบิตลงในบิตแมป ค่าที่กำหนดไว้เพียงค่าเดียวคือ 0 ซึ่งหมายความว่าจุดเริ่มต้นอยู่ที่มุมล่างซ้าย บิตจะถูกเติมจากซ้ายไปขวา จากนั้นจากล่างขึ้นบน

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

60 2 ค่าที่ระบุซึ่งใช้ในการสร้างภาพแบบฮาล์ฟโทน
62 4 พารามิเตอร์การสร้างภาพแบบฮาล์ฟโทน 1 (ดูด้านล่าง)
66 4 พารามิเตอร์การสร้างภาพแบบฮาล์ฟโทน 2 (ดูด้านล่าง)
70 4 ค่าที่ระบุการเข้ารหัสสีสำหรับแต่ละรายการในตารางสี โดยมีค่าคงที่เพียงค่าเดียวคือ 0 ซึ่งหมายถึง RGB
74 4 ตัวระบุที่กำหนดโดยแอปพลิเคชัน ไม่ได้ใช้สำหรับการแสดงผลภาพ

อัลกอริทึมการสร้างภาพแบบฮาล์ฟโทน (ออฟเซ็ต 60) สามารถเป็นได้ดังนี้:

ค่า อัลกอริทึมการสร้างภาพขาวดำ ความคิดเห็น
0 ไม่มี พบได้บ่อยที่สุด
1 การกระจายข้อผิดพลาดพารามิเตอร์การสร้างภาพแบบฮาล์ฟโทน 1 (ออฟเซ็ต 64) คือเปอร์เซ็นต์การลดทอนข้อผิดพลาด 100 หมายถึงไม่มีการลดทอน 0 หมายถึงข้อผิดพลาดไม่ถูกกระจาย
2 PANDA: อัลกอริทึมการประมวลผลสำหรับการได้มาซึ่งเอกสารที่ไม่เข้ารหัส พารามิเตอร์การสร้างภาพแบบฮาล์ฟโทน 1 และ 2 (ค่าออฟเซ็ต 64 และ 68 ตามลำดับ) แสดงถึงมิติ X และ Y ในหน่วยพิกเซล ตามลำดับ ของรูปแบบการสร้างภาพแบบฮาล์ฟโทนที่ใช้
3 ซูเปอร์เซอร์เคิล พารามิเตอร์การสร้างภาพแบบฮาล์ฟโทน 1 และ 2 (ค่าออฟเซ็ต 64 และ 68 ตามลำดับ) แสดงถึงมิติ X และ Y ในหน่วยพิกเซล ตามลำดับ ของรูปแบบการสร้างภาพแบบฮาล์ฟโทนที่ใช้

ตารางสี

ตารางสี (พาเลท) จะปรากฏในไฟล์ภาพ BMP โดยตรงหลังจากส่วนหัวของไฟล์ BMP ส่วนหัวของ DIB และหลังจากบิตมาสก์เสริมสามหรือสี่บิต หาก ใช้ส่วนหัว BITMAPINFOHEADERพร้อมตัวเลือก BI_BITFIELDS (12 ไบต์) หรือ BI_ALPHABITFIELDS (16 ไบต์) ดังนั้น ค่าออฟเซ็ตจึงเท่ากับขนาดของBITMAPFILEHEADERบวกกับขนาดของส่วนหัว DIB (บวกเพิ่มอีก 12-16 ไบต์สำหรับบิตมาสก์เสริมสามหรือสี่บิต) หมายเหตุ: บนWindows CE สามารถใช้ส่วน หัวBITMAPINFOHEADERร่วมกับตัวเลือก BI_ALPHABITFIELDS [ 14 ]ในสมาชิก biCompression ได้

จำนวนรายการในพาเลทมีค่าเท่ากับ 2 n (โดยที่ n คือจำนวนบิตต่อพิกเซล) หรือจำนวนที่น้อยกว่าที่ระบุไว้ในส่วนหัว (ในรูปแบบส่วนหัว OS/2 BITMAPCOREHEADERรองรับเฉพาะพาเลทขนาดเต็มเท่านั้น) [ 3 ] [ 5 ]ในกรณีส่วนใหญ่ แต่ละรายการในตารางสีจะใช้พื้นที่ 4 ไบต์ ตามลำดับ สีน้ำเงิน สีเขียว สีแดง 0x00 (ดูข้อยกเว้นด้านล่าง) โดยจะระบุเป็นดัชนีในBITMAPINFOHEADERในสมาชิกโครงสร้าง biBitCount

ตารางสีคือบล็อกของไบต์ (ตาราง) ที่แสดงรายการสีที่ใช้ในภาพ แต่ละพิกเซลในภาพสีแบบดัชนีจะถูกอธิบายด้วยจำนวนบิต (1, 2, 4 หรือ 8) ซึ่งเป็นดัชนีของสีเดียวที่อธิบายไว้ในตารางนี้ วัตถุประสงค์ของจานสีในบิตแมปสีแบบดัชนีคือการแจ้งให้แอปพลิเคชันทราบเกี่ยวกับสีจริงที่ค่าดัชนีแต่ละค่าสอดคล้องกัน วัตถุประสงค์ของตารางสีในบิตแมปแบบไม่ใช้ดัชนี (ไม่ใช้จานสี) คือการแสดงรายการสีที่ใช้โดยบิตแมปเพื่อวัตถุประสงค์ในการปรับให้เหมาะสมบนอุปกรณ์ที่มีความสามารถในการแสดงสีจำกัด และเพื่ออำนวยความสะดวกในการแปลงเป็นรูปแบบพิกเซลและจานสีต่างๆ ในอนาคต

โดยปกติสีในตารางสีจะถูกระบุใน รูปแบบ ARGB32 ขนาด 4 ไบต์ต่อรายการ ตารางสีที่ใช้กับ OS/2 BITMAPCOREHEADER ใช้ รูปแบบRGB24 ขนาด 3 ไบต์ต่อรายการ[ 3 ] [ 5 ] สำหรับ DIB ที่โหลดในหน่วยความจำ ตารางสีสามารถประกอบด้วยรายการขนาด 2 ไบต์ได้ โดยรายการเหล่านี้จะเป็นดัชนีของจานสีที่ใช้งานอยู่ในปัจจุบัน[ 7 ]แทนที่จะเป็นการกำหนดสี RGB อย่างชัดเจน

Microsoft ไม่อนุญาตให้มีบิตมาสก์ช่องอัลฟาที่ถูกต้อง[ 15 ]ในBITMAPV4HEADERและBITMAPV5HEADERสำหรับภาพสีดัชนี 1bpp, 4bpp และ 8bpp ซึ่งบ่งชี้ว่ารายการตารางสีสามารถระบุส่วนประกอบอัลฟาโดยใช้รูปแบบ8.8.8.[0-8].[0-8]ผ่านสมาชิก RGBQUAD.rgbReserved [ 16 ] ได้เช่น กัน อย่างไรก็ตาม เอกสารบางเวอร์ชันของ Microsoft ไม่อนุญาตให้ใช้คุณสมบัตินี้โดยระบุว่าสมาชิก RGBQUAD.rgbReserved "ต้องเป็นศูนย์"

ดังที่กล่าวไว้ข้างต้น โดยปกติแล้วตารางสีจะไม่ถูกใช้เมื่อพิกเซลอยู่ในรูปแบบ 16 บิตต่อพิกเซล (16bpp) (และสูงกว่า) โดยปกติจะไม่มีรายการตารางสีในไฟล์ภาพบิตแมปเหล่านั้น อย่างไรก็ตาม เอกสารของ Microsoft (บนเว็บไซต์ MSDN ณ วันที่ 16 พฤศจิกายน 2010 [ 17 ] ) ระบุว่าสำหรับ 16bpp (และสูงกว่า) ตารางสีสามารถมีอยู่เพื่อจัดเก็บรายการสีที่ตั้งใจไว้สำหรับการปรับให้เหมาะสมบนอุปกรณ์ที่มีความสามารถในการแสดงสีที่จำกัด ในขณะเดียวกันก็ระบุว่าในกรณีดังกล่าว จะไม่มีรายการพาเลทที่จัดทำดัชนีอยู่ในตารางสีนี้ สิ่งนี้อาจดูเหมือนเป็นความขัดแย้งหากไม่มีการแยกความแตกต่างระหว่างรายการพาเลทที่จำเป็นและรายการสีที่เป็นตัวเลือก

พื้นที่จัดเก็บข้อมูลพิกเซล

บิตที่แสดงถึงพิกเซลของบิตแมปจะถูกบรรจุในแถว (เรียกอีกอย่างว่า strides หรือ scan lines) ขนาดของแต่ละแถวจะถูกปัดขึ้นเป็นจำนวนเท่าของ 4 ไบต์ ( DWORD 32 บิต ) โดยการเติม[ 18 ]

สำหรับรูปภาพที่มีความสูงมากกว่า 1 จะมีการจัดเก็บแถวที่มีการเว้นช่องว่างหลายแถวต่อเนื่องกัน ทำให้เกิดเป็นอาร์เรย์พิกเซล

จำนวนไบต์ทั้งหมดที่จำเป็นในการจัดเก็บพิกเซลหนึ่งแถวสามารถคำนวณได้ดังนี้:

ความกว้างของภาพแสดงเป็นพิกเซล สมการข้างต้นใช้ฟังก์ชัน floor และ ceiling

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

ค่า ImageHeightแสดงเป็นพิกเซล ค่าสัมบูรณ์มีความจำเป็นเนื่องจากImageHeightแสดงเป็นค่าลบสำหรับภาพที่มองจากด้านบน

อาร์เรย์พิกเซล (ข้อมูลบิตแมป)

อาร์เรย์พิกเซลเป็นบล็อกของ DWORD ขนาด 32 บิต ซึ่งอธิบายพิกเซลของภาพทีละพิกเซล โดยปกติพิกเซลจะถูกจัดเก็บแบบ "ล่างขึ้นบน" โดยเริ่มจากมุมล่างซ้าย ไล่จากซ้ายไปขวา แล้วเรียงเป็นแถวจากล่างขึ้นบนของภาพ[ 5 ]เว้นแต่ จะใช้ BITMAPCOREHEADERบิตแมปของ Windows ที่ไม่ได้บีบอัดยังสามารถจัดเก็บจากบนลงล่างได้ เมื่อค่าความสูงของภาพเป็นค่าลบ

ใน DIB OS/2 ดั้งเดิม ค่าความลึกของสีที่ถูกต้องตามกฎหมายมีเพียง 4 ค่า คือ 1, 4, 8 และ 24 บิตต่อพิกเซล (bpp) [ 5 ] ส่วนหัว DIB ในปัจจุบันอนุญาตให้ใช้รูปแบบพิกเซลที่มี 1, 2, 4, 8, 16, 24 และ 32 บิตต่อพิกเซล (bpp) [ 19 ] GDI+ยังอนุญาตให้ใช้ 64 บิตต่อพิกเซลได้อีกด้วย[ 20 ]

ต้องเพิ่มไบต์สำหรับเติม (ไม่จำเป็นต้องเป็น 0) ต่อท้ายแถวเพื่อให้ความยาวของแถวเป็นจำนวนเท่าของสี่ไบต์ เมื่อโหลดอาร์เรย์พิกเซลลงในหน่วยความจำ แต่ละแถวต้องเริ่มต้นที่ที่อยู่หน่วยความจำที่เป็นจำนวนเท่าของ 4 ข้อจำกัดที่อยู่/ออฟเซ็ตนี้เป็นข้อบังคับเฉพาะสำหรับอาร์เรย์พิกเซลที่โหลดในหน่วยความจำเท่านั้น สำหรับวัตถุประสงค์ในการจัดเก็บไฟล์ ขนาดของแต่ละแถวเท่านั้นที่ต้องเป็นจำนวนเท่าของ 4 ไบต์ ในขณะที่ออฟเซ็ตไฟล์สามารถกำหนดได้ตามอำเภอใจ[ 5 ]บิตแมป 24 บิตที่มี Width=1 จะมีข้อมูล 3 ไบต์ต่อแถว (สีน้ำเงิน สีเขียว สีแดง) และไบต์สำหรับเติม 1 ไบต์ ในขณะที่ Width=2 จะมีข้อมูล 6 ไบต์และไบต์สำหรับเติม 2 ไบต์ Width=3 จะมีข้อมูล 9 ไบต์และไบต์สำหรับเติม 3 ไบต์ และ Width=4 จะมีข้อมูล 12 ไบต์และไม่มีไบต์สำหรับเติม

การบีบอัด

รูปแบบพิกเซล

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

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

แผนภาพที่ 2 – กลไก BITFIELDS สำหรับพิกเซล 32 บิตที่แสดงในรูปแบบความยาวตัวอย่าง RGBAX
แผนภาพที่ 2 – กลไก BITFIELDS สำหรับพิกเซล 32 บิตที่แสดงในรูปแบบความยาวตัวอย่าง RGBAX

ฟิลด์ตัวอย่างที่กำหนดโดยบิตมาสก์ BITFIELDS จะต้องอยู่ติดกันและไม่ทับซ้อนกัน แต่ลำดับของฟิลด์ตัวอย่างนั้นเป็นไปตามอำเภอใจ ลำดับฟิลด์ที่พบได้ทั่วไปมากที่สุดคือ: Alpha, Blue, Green, Red (MSB ถึง LSB) บิตมาสก์สีแดง สีเขียว และสีน้ำเงินจะใช้งานได้ก็ต่อเมื่อสมาชิก Compression ของส่วนหัว DIB ถูกตั้งค่าเป็น BI_BITFIELDS เท่านั้น บิตมาสก์ Alpha จะใช้งานได้เมื่อใดก็ตามที่มีอยู่ในส่วนหัว DIB หรือเมื่อสมาชิก Compression ของส่วนหัว DIB ถูกตั้งค่าเป็น BI_ALPHABITFIELDS [ 14 ] ( เฉพาะ Windows CEเท่านั้น)

แผนภาพที่ 3 – รูปแบบพิกเซลที่มีช่องอัลฟาสำหรับพิกเซล 16 บิต (ในสัญกรณ์ความยาวตัวอย่าง RGBAX) ที่สร้างขึ้นจริงโดย Adobe Photoshop[22]
แผนภาพที่ 3 – รูปแบบพิกเซลที่มีช่องอัลฟาสำหรับพิกเซล 16 บิต (ในสัญกรณ์ความยาวตัวอย่าง RGBAX) ที่สร้างขึ้นจริงโดย Adobe Photoshop [ 22 ]
รูปแบบพิกเซลที่เป็นไปได้ทั้งหมดในไฟล์ DIB
รูปแบบพิกเซลที่เป็นไปได้ทั้งหมดในไฟล์ DIB

ชนิดย่อยของวิดีโอ RGB

กลไก BITFIELD ที่อธิบายไว้ข้างต้นอนุญาตให้กำหนดรูปแบบพิกเซลที่แตกต่างกันได้หลายหมื่นรูปแบบ อย่างไรก็ตาม ในทางปฏิบัติมีการใช้งานเพียงไม่กี่รูปแบบเท่านั้น[ 22 ]รูปแบบพาเล็ตทั้งหมด RGB8, RGB4 และ RGB1 (ทำเครื่องหมายด้วยสีเหลืองในตารางด้านบน กำหนดไว้ในdshow.hชื่อ .MEDIASUBTYPE):

ประเภทย่อยวิดีโอ RGB ที่ไม่ได้บีบอัด[ 23 ]
อาร์บีเอ็กซ์ ชนิดย่อย RGB อาร์บีเอ็กซ์ ชนิดย่อย ARGB
8.8.8.0.8 อาร์จีบี32 8.8.8.8.0 ARGB32
10.10.10.2.0 เอ2อาร์10จี10บี10
8.8.8.0.0 อาร์จีบี24 10.10.10.2.0 เอ2บี10จี10อาร์10
5.6.5.0.0 อาร์จีบี565 4.4.4.4.0 ARGB4444
5.5.5.0.1 อาร์จีบี555 5.5.5.1.0 ARGB1555
ฟิลด์บิตสำหรับบิต RGB สิบบิต[ 23 ]
บิตฟิลด์ ออฟเซ็ต

(เลขฐานสิบหก)

บิตเอ2อาร์10จี10บี10 บิตเอ2บี10จี10อาร์10
สีแดง 36 00 00 F0 3FLE:3FF0000020...29FF 03 00 00LE:000003FF 0... 9
สีเขียว 3A 00 FC 0F 00LE:000FFC0010...1900 FC 0F 00LE:000FFC0010...19
สีฟ้า 3E FF 03 00 00LE:000003FF 0... 900 00 F0 3FLE:3FF0000020...29
อัลฟ่า 42 00 00 00 C0LE:C000000030...3100 00 00 C0LE:C000000030...31

ในเวอร์ชัน 2.1.4 FFmpegรองรับ (ตามคำศัพท์ของตัวเอง) รูปแบบพิกเซล BMP ได้แก่bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, gray, pal8และmonobกล่าวคือbgraเป็นรูปแบบพิกเซลเดียวที่รองรับความโปร่งใส[ 24 ]

ตัวอย่างที่ 1ของภาพบิตแมปขนาด 2x2 พิกเซล โดยใช้การเข้ารหัส 24 บิตต่อพิกเซล

ตัวอย่างที่ 1

ต่อไปนี้เป็นตัวอย่างของภาพบิตแมปขนาด 2x2 พิกเซล ความละเอียด 24 บิต (ส่วนหัวของไฟล์ DIB ใน Windows คือBITMAPINFOHEADER ) โดยมีรูปแบบพิกเซลเป็น RGB24

ออฟเซ็ต

(เลขฐานสิบหก)

ขนาด

(ไบต์)

ค่าเลขฐานสิบหก ค่า คำอธิบาย
ส่วนหัว BMP
00 2 42 4D "บีเอ็ม" ช่อง ID ( 42 4D)
02 4 46 00 00 00 70 ไบต์ (54+16) ขนาดของไฟล์ BMP (ส่วนหัว 54 ไบต์ + ข้อมูล 16 ไบต์)
06 2 00 00 ยังไม่ได้ใช้งาน เฉพาะแอปพลิเคชัน
08 2 00 00 ยังไม่ได้ใช้งาน เฉพาะแอปพลิเคชัน
0A 4 36 00 00 00 54 ไบต์ (14+40) ตำแหน่งที่สามารถพบอาร์เรย์พิกเซล (ข้อมูลบิตแมป) ได้
ส่วนหัว DIB
0E 4 28 00 00 00 40 ไบต์ จำนวนไบต์ในส่วนหัวของไฟล์ DIB (นับจากจุดนี้)
12 4 02 00 00 00 2 พิกเซล (เรียงจากซ้ายไปขวา) ความกว้างของภาพบิตแมปในหน่วยพิกเซล
16 4 02 00 00 00 2 พิกเซล (เรียงจากล่างขึ้นบน) ความสูงของภาพบิตแมปในหน่วยพิกเซล ค่าบวกแสดงถึงลำดับพิกเซลจากล่างขึ้นบน
1A 2 01 00 เครื่องบิน 1 ลำ จำนวนระนาบสีที่ใช้
1ซี 2 18:00 น. 24 บิต จำนวนบิตต่อพิกเซล
1E 4 00 00 00 00 0 BI_RGB, ไม่มีการบีบอัดอาร์เรย์พิกเซล
22 4 10 00 00 00 16 ไบต์ ขนาดของข้อมูลบิตแมปดิบ (รวมถึงขอบ)
26 4 13 0B 00 00 2835 พิกเซล/เมตร ในแนวนอน ความละเอียดในการพิมพ์ภาพ72 DPI × 39.3701 นิ้วต่อเมตร จะได้ขนาด 2834.6472
2A 4 13 0B 00 00 2835 พิกเซล/เมตร แนวตั้ง
2E 4 00 00 00 00 0 สี จำนวนสีในจานสี
32 4 00 00 00 00 0 สีสำคัญ 0 หมายความว่าทุกสีมีความสำคัญ
จุดเริ่มต้นของอาร์เรย์พิกเซล (ข้อมูลบิตแมป)
36 3 00 00 FF 0 0 255 สีแดง, พิกเซล (x=0, y=1)
39 3 FF FF FF 255 255 255 สีขาว, พิกเซล (x=1, y=1)
3ซี 2 00 00 0 0 ค่าเผื่อสำหรับการจัดเรียงข้อมูล 4 ไบต์ (อาจเป็นค่าอื่นที่ไม่ใช่ศูนย์)
3E 3 FF 00 00 255 0 0 สีน้ำเงิน, พิกเซล (x=0, y=0)
41 3 00 FF 00 0 255 0 สีเขียว, พิกเซล (x=1, y=0)
44 2 00 00 0 0 ค่าเผื่อสำหรับการจัดเรียงข้อมูล 4 ไบต์ (อาจเป็นค่าอื่นที่ไม่ใช่ศูนย์)
0,0: blue 0000FF FF0,1: green 00FF00 FF0,2: red FF00000 FF0,3: white FFFFFF FF1,0: blue 0000FF 7F, half transparent1,1: green 00FF00 7F, half transparent1,2: red FF0000 7F, half transparent1,3: white FFFFFF 7F, half transparent
ตัวอย่างที่ 2ของภาพบิตแมปขนาด 4x2 พิกเซล โดยใช้การเข้ารหัส 32 บิตต่อพิกเซล

ตัวอย่างที่ 2

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

ออฟเซ็ต

(เลขฐานสิบหก)

ขนาด

(ไบต์)

ค่าเลขฐานสิบหก ค่า คำอธิบาย
ส่วนหัว BMP
00 2 42 4D "บีเอ็ม" ช่องรหัสประจำตัว (42h, 4Dh)
02 4 9A 00 00 00 154 ไบต์ (122+32) ขนาดของไฟล์ BMP
06 2 00 00 ยังไม่ได้ใช้งาน เฉพาะแอปพลิเคชัน
08 2 00 00 ยังไม่ได้ใช้งาน เฉพาะแอปพลิเคชัน
0A 4 7A 00 00 00 122 ไบต์ (14+108) ตำแหน่งที่สามารถพบอาร์เรย์พิกเซล (ข้อมูลบิตแมป) ได้
ส่วนหัว DIB
0E 4 6C 00 00 00 108 ไบต์ จำนวนไบต์ในส่วนหัวของไฟล์ DIB (นับจากจุดนี้)
12 4 04 00 00 00 4 พิกเซล (เรียงจากซ้ายไปขวา) ความกว้างของภาพบิตแมปในหน่วยพิกเซล
16 4 02 00 00 00 2 พิกเซล (เรียงจากล่างขึ้นบน) ความสูงของภาพบิตแมปในหน่วยพิกเซล
1A 2 01 00 เครื่องบิน 1 ลำ จำนวนระนาบสีที่ใช้
1ซี 2 20 00 32 บิต จำนวนบิตต่อพิกเซล
1E 4 03 00 00 00 3 BI_BITFIELDS ไม่มีการบีบอัดอาร์เรย์พิกเซล
22 4 20 00 00 00 32 ไบต์ ขนาดของข้อมูลบิตแมปดิบ (รวมถึงขอบ)
26 4 13 0B 00 00 2835 พิกเซล/เมตร ในแนวนอน ความละเอียดในการพิมพ์ภาพ 72 DPI × 39.3701 นิ้วต่อเมตร จะได้ขนาด 2834.6472
2A 4 13 0B 00 00 2835 พิกเซล/เมตร แนวตั้ง
2E 4 00 00 00 00 0 สี จำนวนสีในจานสี
32 4 00 00 00 00 0 สีสำคัญ 0 หมายความว่าทุกสีมีความสำคัญ
36 4 00 00 FF 00 00FF0000 ในรูปแบบ big-endian บิตมาสก์ช่องสีแดง (ใช้ได้เนื่องจากมีการระบุ BI_BITFIELDS)
3A 4 00 FF 00 00 0000FF00 ในรูปแบบ big-endian บิตมาสก์ช่องสีเขียว (ใช้ได้เนื่องจากมีการระบุ BI_BITFIELDS)
3E 4 FF 00 00 00 000000FF ในรูปแบบ big-endian บิตมาสก์ช่องสีน้ำเงิน (ใช้ได้เนื่องจากมีการระบุ BI_BITFIELDS)
42 4 00 00 00 FF FF000000 ในรูปแบบ big-endian บิตมาสก์ช่องอัลฟา
46 4 20 6E 69 57 ลิตเติ้ลเอนเดียน " Win " LCS_WINDOWS_COLOR_SPACE
4A 36 00...00 จุดสิ้นสุดของพื้นที่สี CIEXYZTRIPLE ไม่ได้ใช้สำหรับ LCS " Win " หรือ " sRGB"
6E 4 00 00 00 00 0 เรดแกมมา ไม่ได้ใช้สำหรับ LCS " Win " หรือ " sRGB"
72 4 00 00 00 00 0 กรีนแกมมา ไม่ได้ใช้สำหรับ LCS " Win " หรือ " sRGB"
76 4 00 00 00 00 0 บลูแกมมา ไม่ได้ใช้สำหรับ LCS " Win " หรือ " sRGB"
จุดเริ่มต้นของอาร์เรย์พิกเซล (ข้อมูลบิตแมป)
7A 4 FF 00 00 7F 255 0 0 127 สีน้ำเงิน (ค่าอัลฟา: 127), พิกเซล (x=0, y=1)
7E 4 00 FF 00 7F 0 255 0 127 สีเขียว (อัลฟา: 127), พิกเซล (x=1, y=1)
82 4 00 00 FF 7F 0 0 255 127 สีแดง (ค่าอัลฟา: 127), พิกเซล (x=2, y=1)
86 4 FF FF FF 7F 255 255 255 127 สีขาว (ค่าอัลฟา: 127), พิกเซล (x=3, y=1)
8A 4 FF 00 00 FF 255 0 0 255 สีน้ำเงิน (ค่าอัลฟา: 255), พิกเซล (x=0, y=0)
8E 4 00 FF 00 FF 0 255 0 255 สีเขียว (ค่าอัลฟา: 255), พิกเซล (x=1, y=0)
92 4 00 00 FF FF 0 0 255 255 สีแดง (ค่าอัลฟา: 255), พิกเซล (x=2, y=0)
96 4 FF FF FF FF 255 255 255 255 สีขาว (ค่าอัลฟา: 255), พิกเซล (x=3, y=0)

โปรดสังเกตว่าข้อมูลบิตแมปเริ่มต้นจากมุมล่างซ้ายของภาพ

การใช้งานรูปแบบ BMP

ความเรียบง่ายของรูปแบบไฟล์ BMP และความคุ้นเคยอย่างแพร่หลายใน Windows และระบบปฏิบัติการอื่นๆ รวมถึงข้อเท็จจริงที่ว่ารูปแบบนี้มีเอกสารประกอบค่อนข้างดีและเป็นรูปแบบเปิดทำให้ BMP เป็นรูปแบบที่ใช้กันทั่วไปซึ่งโปรแกรมประมวลผลภาพจากระบบปฏิบัติการหลายระบบสามารถอ่านและเขียนได้ ไฟล์ ICOและ CUR ประกอบด้วยบิตแมปที่ขึ้นต้นด้วยส่วนหัว BITMAPINFOHEADER

อินเทอร์เฟซผู้ใช้แบบกราฟิกรุ่นเก่าจำนวนมากใช้บิตแมปในระบบย่อยกราฟิกในตัว[ 25 ]ตัวอย่างเช่น ระบบย่อย GDI ของแพลตฟอร์ม Microsoft Windows และ OS/2 ซึ่งรูปแบบเฉพาะที่ใช้คือรูปแบบไฟล์บิตแมปของ Windows และ OS/2ซึ่งมักตั้งชื่อโดยใช้ส่วนขยายไฟล์.BMP . [ 26 ]

แม้ว่าไฟล์ BMP ส่วนใหญ่จะมีขนาดไฟล์ค่อนข้างใหญ่เนื่องจากไม่มีการบีบอัด (หรือโดยทั่วไปแล้วใช้การเข้ารหัสแบบ Run-Length Encoding อัตราส่วนต่ำ บนภาพแบบ Palletized) แต่ไฟล์ BMP จำนวนมากสามารถบีบอัดได้อย่างมากด้วย อัลกอริธึม การบีบอัดข้อมูลแบบไม่สูญเสียเช่นZIPเนื่องจากมีข้อมูลที่ซ้ำซ้อนอยู่ บางรูปแบบ เช่นRARยังมีฟังก์ชันที่ออกแบบมาเพื่อการบีบอัดข้อมูลดังกล่าวอย่างมีประสิทธิภาพโดยเฉพาะอีกด้วย

ระบบX Window Systemใช้ รูปแบบ XBM ที่คล้ายกัน สำหรับภาพขาวดำ และXPM ( pixelmap ) สำหรับภาพสี นอกจากนี้ยังมีรูปแบบ "raw" หลากหลายรูปแบบ ซึ่งบันทึกข้อมูลดิบโดยไม่มีข้อมูลอื่นใด รูปแบบ Portable Pixmap (PPM) และTruevision TGAก็มีอยู่เช่นกัน แต่ไม่ค่อยได้ใช้ หรือใช้เฉพาะในกรณีพิเศษเท่านั้น ตัวอย่างเช่น TGA สามารถบรรจุข้อมูลความโปร่งใสได้

  • โครงสร้างไฟล์ภาพบิตแมปที่ digicamsoft.com
  • ข้อมูลเบื้องต้นเกี่ยวกับ DIBs (Device Independent Bitmaps)ที่ herdsoft.com
  • คลาส C++ สำหรับโหลดภาพบิตแมปอย่างง่ายที่ kalytta.com (ยังไม่รองรับ A2R10G10B10)
  • รูปแบบไฟล์ BMP ตอนที่ 1 โดย เดวิด ชาร์แลปในวารสารเครื่องมือซอฟต์แวร์ของดร. ด็อบบ์ (drdobbs.com) มีนาคม 1995
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=BMP_file_format&oldid=1358973720 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ รูปแบบไฟล์ BMP

รูป แบบไฟล์ BMP หรือ บิตแมป เป็น รูปแบบไฟล์ ภาพกราฟิกแรสเตอร์ ที่ใช้ในการจัดเก็บ ภาพดิจิทัล บิตแมป โดยไม่ขึ้นอยู่กับ อุปกรณ์แสดงผล (เช่น อะ แดปเตอร์กราฟิก )...

บิตแมปที่ไม่ขึ้นกับอุปกรณ์และรูปแบบไฟล์ BMP

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

โครงสร้างไฟล์

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

DIB ในหน่วยความจำ

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