บิตแมป Windows (.bmp)
Microsoft มาตรฐานBitmap Image File (BMP) เป็นรูปแบบกราฟิกราสเตอร์หลักของ Microsoft ที่ไม่ขึ้นกับอุปกรณ์ ซึ่งจัดเก็บสแกนไลน์ที่ไม่มีการบีบอัดหรือบีบอัดแบบ RLE พร้อมความเข้ากันได้กับเฟรมบัฟเฟอร์ฮาร์ดแวร์โดยตรง
แปลง BMP เป็น PNG
ตัวแปลงจาก BMP เป็น PNG ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ BMP โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ BMP โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
42 4Dการแสดงผลรูปแบบ ASCII: BM
มาตรฐาน: Microsoft Windows Device-Independent Bitmap (DIB) Architecture
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | BITMAPFILEHEADER ตามด้วย BITMAPINFOHEADER (DIB) และอาร์เรย์พิกเซลแรสเตอร์ |
| การบีบอัด | เส้นสแกนดิบแบบไม่บีบอัด หรือการเข้ารหัสความยาวช่วง BI_RLE8 / BI_RLE4 ที่เลือกใช้ได้ |
| การจัดลำดับไบต์ | ลำดับไบต์ Little-Endian (ตามลำดับของ Intel x86) |
| พื้นที่สี | RGB ที่ขึ้นกับอุปกรณ์, sRGB (ฝังอยู่ใน BITMAPV5HEADER) |
| ช่องสัญญาณและโครงสร้าง | ภาพขาวดำ 1 บิต, พาเลต 4 บิต / 8 บิต, 16 บิต, RGB 24 บิต หรือ RGBA 32 บิต |
| ขนาดสูงสุด | 2,147,483,647 x 2,147,483,647 พิกเซล (จำนวนเต็มมีเครื่องหมาย 32 บิต) |
| ความโปร่งใส | รองรับมาสก์อัลฟา BGRA 32 บิตในรูปแบบ BITMAPV3HEADER และ V5HEADER รุ่นใหม่ |
| การสตรีมและแบบโปรเกรสซีฟ | ไม่รองรับการสตรีม; จัดเก็บเส้นสแกนกลับหัว (จากล่างขึ้นบน) เว้นแต่ความสูงจะเป็นค่าลบ |
ตารางเปรียบเทียบทางเทคนิค: BMP กับคู่แข่ง
| คุณลักษณะทางเทคนิค | BMP (ปัจจุบัน) | PNG | TIFF | JPG |
|---|---|---|---|---|
| โหมดการบีบอัด | ไม่บีบอัด / RLE น้อยที่สุด | การบีบอัด Deflate แบบไม่สูญเสียข้อมูล ขนาดไฟล์ที่ประหยัดได้ขึ้นอยู่กับเนื้อหาภาพ | ไม่บีบอัด / LZW / Zip | DCT แบบสูญเสียข้อมูล (ขนาดเล็กลงประมาณ 90%) |
| ความเร็วในการถอดรหัส | คัดลอกหน่วยความจำทันที | ต้องมีการถอดรหัส Deflate | ต้องมีการถอดรหัส LZW/ZIP | ต้องมีการคำนวณ IDCT |
| การเรียงลำดับสแกนไลน์ | จากล่างขึ้นบน (กลับด้าน) | จากบนลงล่าง | จากบนลงล่าง / แบบสตริป | บล็อก MCU จากบนลงล่าง |
| ความเหมาะสมกับเว็บ | แย่มาก (ขนาดเพย์โหลดใหญ่เกินไป) | ยอดเยี่ยมสำหรับกราฟิก | แย่ (งานพิมพ์บนเดสก์ท็อป) | ยอดเยี่ยมสำหรับการถ่ายภาพ |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
ภาพแสดงผลเอียงทแยงมุมหรือบิดเบี้ยวเป็นมุม
สาเหตุหลัก: คำนวณการเติมข้อมูลท้ายแถวไม่ถูกต้อง (ไม่ได้เติมสแกนไลน์แต่ละแถวให้ครบขอบเขต 4 ไบต์)
การกู้คืน: เข้ารหัสใหม่โดยใช้ File2File.app Image Converter เพื่อบังคับให้สตรีดสแกนไลน์ 32 บิตถูกต้อง
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
ตัวถอดรหัส BMP มักประสบปัญหาการอ่านหน่วยความจำเกินขอบเขต (Buffer Over-read) เมื่อจัดสรรบัฟเฟอร์ตามขนาดส่วนหัว DIB ที่ไม่น่าเชื่อถือ
เวกเตอร์การโจมตีที่ทราบ
- การเกิด Integer Overflow ในการคำนวณ width * height * bpp ซึ่งนำไปสู่การจัดสรร Heap ขนาดเล็กและการเขียนข้อมูลนอกขอบเขต
- ลำดับ escape ของการเข้ารหัสความยาวรัน (Run-length escape sequences) ของ RLE8/RLE4 ที่เสียหาย ทำให้เกิดการเขียนหน่วยความจำนอกเหนือบัฟเฟอร์ที่จัดสรรไว้
- การปฏิเสธการให้บริการ (Denial of Service) ผ่านการจัดสรรหน่วยความจำขนาดหลายกิกะไบต์ที่ถูกกระตุ้นโดยค่าขนาดในส่วนหัวที่ถูกสร้างขึ้นมาเพื่อโจมตี
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ตรวจสอบความถูกต้องของขอบเขตความกว้าง ความสูง และความลึกบิตของส่วนหัว DIB อย่างเข้มงวดก่อนจัดสรรหน่วยความจำปลายทาง
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- ไม่มีการเสื่อมของคุณภาพจากการบีบอัด: การจัดเก็บพิกเซลที่ตรงกันทุกบิต 100% โดยไม่มีอาร์ติแฟกต์จากการบีบอัด
- Windows มีตัวแปลงรหัส BMP ในตัว ส่วนการรองรับในระบบปฏิบัติการและแอปอื่น ๆ แตกต่างกันไป
- ความซับซ้อนในการถอดรหัสที่ต่ำมาก ทำให้เหมาะสำหรับไมโครคอนโทรลเลอร์ฝังตัวและการศึกษาการเขียนโปรแกรมกราฟิก
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- ขนาดไฟล์ใหญ่โตเนื่องจากขาดการบีบอัดเอนโทรปีสมัยใหม่ เช่น DEFLATE หรือการเข้ารหัสแบบ Huffman
- ไม่มีประสิทธิภาพสำหรับการส่งผ่านเว็บหรือการกระจายผ่านเครือข่ายมือถือ
- การเรียงสแกนไลน์จากล่างขึ้นบนทำให้ต้องกลับลำดับแถวในไปป์ไลน์กราฟิกสมัยใหม่ที่เรียงจากบนลงล่าง
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- ตามค่าเริ่มต้น BMP จะจัดเก็บสแกนไลน์ของภาพกลับหัว (จากล่างขึ้นบน) เนื่องจากระบบพิกัดคาร์ทีเซียนที่ OS/2 ใช้
- หากค่าความสูงในส่วนหัว BMP ถูกตั้งค่าเป็นตัวลบ ภาพจะถูกถอดรหัสในลักษณะตั้งตรง (จากบนลงล่าง)
- สแกนไลน์ทุกเส้นในไฟล์ BMP จะต้องถูกเติมด้วยเลขศูนย์ให้เป็นผลคูณของ 4 ไบต์ (การจัดแนวขอบเขต 32 บิต)
คำถามทางเทคนิคที่พบบ่อย
เหตุใดไฟล์ BMP จึงมีขนาดใหญ่มาก
ไฟล์ BMP จัดเก็บค่าสีดิบที่ไม่มีการบีบอัดสำหรับทุกๆ พิกเซล ในขณะที่รูปแบบเช่น PNG จะบีบอัดข้อมูลนั้นโดยไม่สูญเสียคุณภาพใดๆ
BMP รองรับความโปร่งใสหรือไม่
ได้ ไฟล์ BMP แบบ 32-bit (ที่ใช้ BITMAPV3HEADER หรือใหม่กว่า) สามารถจัดเก็บช่องสัญญาณอัลฟา 8-bit ได้ แม้ว่าการรองรับจะแตกต่างกันไปในซอฟต์แวร์รุ่นเก่าๆ
ลดขนาดไฟล์ BMP ได้อย่างไร
การแปลงไฟล์ BMP เป็น PNG อาจลดขนาดไฟล์โดยคงค่าพิกเซลไว้ แต่ผลลัพธ์ขึ้นอยู่กับเนื้อหาภาพและการเข้ารหัส BMP
คู่การแปลงไฟล์ BMP ที่เกี่ยวข้อง
การแปลงไฟล์ Windows Bitmap ที่ไม่มีการบีบอัดเป็น PNG จะให้การบีบอัดแบบไม่สูญเสียข้อมูล ซึ่งช่วยลดขนาดไฟล์โดยไม่ลดคุณภาพของภาพ
การแปลงไฟล์ Portable Network Graphics เป็น Windows Bitmap จะเปลี่ยนข้อมูลราสเตอร์ที่บีบอัดให้เป็นตารางพิกเซลที่ไม่มีการบีบอัด สำหรับระบบปฏิบัติการและฮาร์ดแวร์รุ่นเก่า
วางภาพหน้าจอ BMP ที่รองรับลงบน PDF หนึ่งหน้า เพื่อใช้กับทิกเก็ตหรือรายงาน เส้นทางนี้รองรับพิกเซลแบบไม่บีบอัด 24-bit หรือ 32-bit เท่านั้น ไม่รองรับ BMP รูปแบบอื่นที่มีการบีบอัด