ไฟล์ DIB คืออะไร??
บิตแมปที่ไม่ขึ้นกับอุปกรณ์ (DIB) เป็นไฟล์ภาพแรสเตอร์ที่มีโครงสร้างคล้ายกับไฟล์บิตแมปมาตรฐาน (BMP/image/bmp/)) ประกอบด้วยตารางสีที่อธิบายการจับคู่สี RGB กับค่าพิกเซล สิ่งนี้ทำให้ DIB สามารถแสดงภาพบนอุปกรณ์ใดก็ได้ สามารถเปิดได้กับแอปพลิเคชันเกือบทั้งหมดที่สามารถเปิดไฟล์ BMP มาตรฐานบน Windows เช่นเดียวกับ macOS DIB เป็นไฟล์ไบนารีและมีรูปแบบไฟล์ที่ซับซ้อนคล้ายกับ BMP ภาพ DIB ไม่ขึ้นกับความสามารถในการแสดงผลของอุปกรณ์เรนเดอร์ในแง่ของความลึกของสีและพิกเซลต่อนิ้ว
ข้อมูลจำเพาะรูปแบบไฟล์ DIB
DIB มีข้อมูลสีและขนาดดังต่อไปนี้:
- รูปแบบสีของอุปกรณ์ที่สร้างภาพสี่เหลี่ยม
- ความละเอียดของอุปกรณ์ที่สร้างภาพสี่เหลี่ยม
- จานสีสำหรับอุปกรณ์ที่สร้างภาพ
- อาร์เรย์ของบิตที่แมปสีแดง เขียว น้ำเงิน ( RGB ) สามเท่าเป็นพิกเซลในภาพสี่เหลี่ยม
- ตัวระบุการบีบอัดข้อมูลที่ระบุรูปแบบการบีบอัดข้อมูล (ถ้ามี) ที่ใช้ในการลดขนาดของอาร์เรย์ของบิต
รูปแบบบล็อกข้อมูล DIB
DIB มาในบริบทของบล็อกหน่วยความจำเมื่อเปรียบเทียบกับไฟล์ .DIB ที่จัดเก็บไว้ในแผ่นดิสก์ บล็อกหน่วยความจำประกอบด้วยโครงสร้างที่เป็นไปตามข้อกำหนด Windows API สำหรับ DIB DIB จริงประกอบด้วย:
- ส่วนหัว
- จานสี
- ข้อมูลพิกเซล
ในทางปฏิบัติแล้ว การทำงานกับจานสี ส่วนหัว และข้อมูลรูปภาพนั้นทำราวกับว่าพวกเขาเป็นสามบล็อกของหน่วยความจำที่แยกจากกัน หมายเลขอ้างอิงสำหรับบล็อกหน่วยความจำทั่วไปนี้ถูกกำหนดโดยใช้ GlobalAlloc และเรียกว่า HDIB ซึ่งใช้เพื่อแยกและทำงานกับส่วนหัว ตารางสี และข้อมูลพิกเซล
โครงสร้าง
ข้อมูลที่อยู่ใน DIB จะแสดงด้วยโครงสร้างที่แตกต่างกัน เหล่านี้รวมถึง:
BITMAPInfo - กำหนดขนาดและข้อมูลสีสำหรับ DIB
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, *LPBITMAPINFO, *PBITMAPINFO;
ประกอบด้วย BITMAPINFOHEADER:
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
ตามด้วยโครงสร้าง RGBQAD สองตัวขึ้นไป
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
บิตข้อมูล
บิต | รายละเอียด |
---|---|
รูปแบบ 1 บิต (ขาวดำ) | บิตแมปขาวดำประกอบด้วยสองสี (ขาวดำ) เนื่องจากสีมีจำนวนจำกัด บิตแมปเหล่านี้จึงใช้พื้นที่บนดิสก์น้อยลง bitBitCount คืนค่าจริงหรือเท็จเพื่อแสดงทั้งสองสี แอปพลิเคชันส่วนใหญ่ข้ามจานสีโดยสิ้นเชิงหาก bitBitCount==1 |
รูปแบบ 4 บิต (VGA หรือ 16 สี) | แต่ละไบต์ของข้อมูลภาพแทนสองพิกเซลและ bitBitCount==4 บิตเหล่านี้แสดงสีของพิกเซลตามลำดับจากมากไปน้อย |
รูปแบบ 8 บิต (256 สี) | รูปแบบ 8 บิตนี้สามารถแสดงสีได้สูงสุด 256 สี แต่ละไบต์ในอาร์เรย์ข้อมูลบิตแมปของรูปภาพแทนพิกเซลเดียว ค่าของไบต์นั้นคือจำนวนรายการจานสีที่จะใช้จาก 256 รายการที่แสดงโดย bmciColors |
รูปแบบ 24 บิต (TrueColor) | บิตแมปเหล่านี้สามารถมีสีได้สูงสุด 2^24 สี (biBitCount == 24) แต่ละลำดับสามไบต์ในอาร์เรย์ข้อมูลบิตแมปแสดงถึงความเข้มสัมพัทธ์ของสีหลักสามสีของพิกเซล เฉดสีถูกอธิบายว่าเป็นค่าตั้งแต่ 0 ถึง 255 และถูกจัดเก็บไว้ในสามไบต์ตามลำดับสีน้ำเงิน เขียว และแดง นี่เป็นความแตกต่างที่สำคัญ เนื่องจากการอ้างอิงถึงสีส่วนใหญ่ใน Windows จะใช้ลำดับที่ตรงกันข้าม: สีแดง/สีเขียว/สีน้ำเงิน ดังนั้นให้นึกถึง “BGR” เมื่อทำงานกับภาพ TrueColor แทน “RGB” สามารถระบุจานสีเพื่อเร่งกระบวนการวาดสำหรับ Windows ซึ่งในกรณีนี้ biClrUsed จะไม่เป็น 0 แต่อย่างที่คุณเห็น ไม่จำเป็น เนื่องจากข้อมูลพิกเซลมีข้อมูลสีอยู่แล้ว |
รูปแบบ 32 บิต | ภาพ 32 บิตมีสีได้สูงสุด 2^24 สี (biBitCount == 24) |