Τι είναι ένα αρχείο DIB;
Ένα Bitmap Ανεξάρτητο από Συσκευή (DIB) είναι ένα αρχείο εικόνας ράστερ που έχει παρόμοια δομή με τα τυπικά αρχεία Bitmap(BMP/image/bmp/)). Περιέχει έναν πίνακα χρωμάτων που περιγράφει την αντιστοίχιση των χρωμάτων RGB στις τιμές των pixel. Αυτό επιτρέπει στο DIB να αναπαριστά εικόνα σε οποιαδήποτε συσκευή. Μπορεί να ανοίξει με όλες σχεδόν τις εφαρμογές που μπορούν να ανοίξουν ένα τυπικό αρχείο BMP στα Windows καθώς και στο macOS. Τα DIB είναι δυαδικά αρχεία και έχουν πολύπλοκη μορφή αρχείου παρόμοια με το BMP. Οι εικόνες DIB είναι ανεξάρτητες από τις δυνατότητες εξόδου των συσκευών απόδοσης όσον αφορά το βάθος χρώματος και το pixel ανά ίντσα.
Προδιαγραφές μορφής αρχείου DIB
Ένα DIB περιέχει τις ακόλουθες πληροφορίες χρώματος και διαστάσεων:
- Η μορφή χρώματος της συσκευής στην οποία δημιουργήθηκε η ορθογώνια εικόνα.
- Η ανάλυση της συσκευής στην οποία δημιουργήθηκε η ορθογώνια εικόνα.
- Η παλέτα για τη συσκευή στην οποία δημιουργήθηκε η εικόνα.
- Μια σειρά από bit που αντιστοιχίζει τριπλέτες κόκκινου, πράσινου, μπλε ( RGB ) σε pixel στην ορθογώνια εικόνα.
- Ένα αναγνωριστικό συμπίεσης δεδομένων που υποδεικνύει το σχήμα συμπίεσης δεδομένων (εάν υπάρχει) που χρησιμοποιείται για τη μείωση του μεγέθους της συστοιχίας των bit.
Μορφή μπλοκ δεδομένων DIB
Το DIB έρχεται στο πλαίσιο του μπλοκ μνήμης σε σύγκριση με τα αρχεία .DIB που είναι αποθηκευμένα σε δίσκο. Το μπλοκ μνήμης αποτελείται από δομή που είναι σύμφωνη με τις προδιαγραφές API των Windows για DIB. Το πραγματικό DIB αποτελείται από:
- Κεφαλιά
- Παλέτα χρωμάτων
- Δεδομένα Pixel
Πρακτικά, η εργασία με δεδομένα παλέτας, κεφαλίδας και εικόνας γίνεται σαν να ήταν τρία ξεχωριστά μπλοκ μνήμης. Μια λαβή σε αυτό το κοινό μπλοκ μνήμης εκχωρείται χρησιμοποιώντας το GlobalAlloc και είναι γνωστό ως HDIB, το οποίο χρησιμοποιείται για την εξαγωγή και την εργασία με την κεφαλίδα, τον πίνακα χρωμάτων και τα δεδομένα pixel.
Δομές
Οι πληροφορίες που περιέχονται σε ένα 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;
Bits δεδομένων
Bits | Περιγραφή |
---|---|
Μορφή 1 bit (μονόχρωμη) | Οι μονόχρωμοι bitmaps αποτελούνται από δύο χρώματα (ασπρόμαυρο). Λόγω αυτού του περιορισμένου αριθμού χρωμάτων, αυτά τα bitmaps καταλαμβάνουν λιγότερο χώρο στο δίσκο. Το bitBitCount επιστρέφει true ή false για αναπαράσταση και των δύο χρωμάτων. Οι περισσότερες από τις εφαρμογές παραλείπουν εντελώς την παλέτα εάν bitBitCount==1. |
Μορφή 4 bit (VGA ή 16 χρώματος) | Κάθε byte δεδομένων εικόνας αντιπροσωπεύει δύο pixel και bitBitCount==4. Αυτά τα bits αντιπροσωπεύουν το χρώμα του pixel με φθίνουσα σειρά. |
Μορφή 8 bit (256 χρώματα) | Αυτή η μορφή 8 bit μπορεί να αντιπροσωπεύει έως και 256 χρώματα. Κάθε byte στον πίνακα δεδομένων bitmap της εικόνας αντιπροσωπεύει ένα μόνο pixel. Η τιμή αυτού του byte είναι ο αριθμός της καταχώρησης της παλέτας χρωμάτων που θα χρησιμοποιηθεί από τις 256 καταχωρήσεις όπως αντιπροσωπεύονται από το bmciColors. |
Μορφή 24 bit (TrueColor) | Αυτά τα bitmaps μπορούν να έχουν έως και 2^24 χρώματα (biBitCount == 24). Κάθε ακολουθία τριών byte στον πίνακα δεδομένων bitmap αντιπροσωπεύει τις σχετικές εντάσεις των τριών βασικών αποχρώσεων ενός pixel. Οι αποχρώσεις περιγράφονται ως τιμές που κυμαίνονται από 0 έως 255 και αποθηκεύονται στα τρία byte με τη σειρά Μπλε, Πράσινο και Κόκκινο. Αυτή είναι μια σημαντική διάκριση, επειδή οι περισσότερες αναφορές σε χρώματα στα Windows χρησιμοποιούν την αντίθετη σειρά: Κόκκινο/Πράσινο/Μπλε, οπότε σκεφτείτε “BGR” όταν εργάζεστε με εικόνες TrueColor αντί για “RGB”. Μπορεί να καθοριστεί μια παλέτα χρωμάτων για την επιτάχυνση της διαδικασίας σχεδίασης για τα Windows, οπότε το biClrUsed δεν θα είναι 0. Αλλά όπως μπορείτε να δείτε, δεν χρειάζεται, καθώς τα ίδια τα δεδομένα pixel περιέχουν τις πληροφορίες χρώματος. |
Μορφή 32 bit | Οι εικόνες 32 bit έχουν έως 2^24 χρώματα (biBitCount == 24). |