aspose.info
TH

DIB

อัปเดตเมื่อ

ไฟล์ 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)

อ้างอิง

ดูเพิ่มเติม