1.6 ΔΟΜΗ ΤΩΝ ΚΑΤΑΛΟΓΩΝ ΤΩΝ ΑΡΧΕΙΩΝ TIFF


Ενας κατάλογος στα αρχεία TIFF αποτελείται από τρία μέρη, όπως φαίνεται στο σχήμα 1.5. Τα δύο πρώτα BYTE, σε έναν κατάλογο, περιλαμβάνουν ένα μετρητή ετικετών. Αυτός ο μετρητής περιέχει τον αριθμό των ετικέτων που εμφανίζονται στον κατάλογο. Ακολουθούν οι ετικέτες που αποτελούνται από 12-BYTE η κάθε μία και οι οποίες περιγράφουν την εικόνα που ακολούθει τον κατάλογο. Τέλος, υπάρχει ένας δείκτης προς τον επόμενο κατάλογο (εάν υπάρχει). Εάν δεν υπάρχει άλλος κατάλογος, τότε αυτό το τελευταίο κομμάτι του καταλόγου αποτελείται από μηδενικά (0).

Σημειώνουμε ότι ο κατάλογος μπορεί να βρίσκεται οπουδήποτε μέσα σε ένα αρχείο TIFF (μετά την επικεφαλίδα), αλλά πρέπει να ξεκινά από την αρχή μίας λέξης δεδομένων ( WORD ), δηλαδή ο κατάλογος πρέπει να ξεκινά από ζυγό αριθμό διεύθυνσης BΥΤΕ. Αυτή η τελευταία προϋπόθεση χρησιμοποιείται για να κάνει εύκολη την ανάγνωση των ετικετών από ένα συνηθισμένο λογισμικό.

Οι ετικέτες σε έναν κατάλογο πρέπει να είναι ταξινομημένες με αύξουσα σειρά. Αυτό βοηθά την εφαρμογή ανάγνωσης ενός TIFF στο να αποφασίζει κατά πόσο μία ζητούμενη ετικέτα υπάρχει στον κατάλογο ή όχι.


+--------------------+ Α | | + ΜΕΤΡΗΤΗΣ ΕΤΙΚΕΤΩΝ -| N = ΠΛΗΘΟΣ | ( Ν ) | ΕΤΙΚΕΤΩΝ +--------------------| Α + 2 : : : ΕΤΙΚΕΤΑ 1 : : : +--------------------| Α + 2 + 12 : : : ΕΤΙΚΕΤΑ 2 : : ο--:------+ +--------------------| | : : | Α + 2 + 24 : : | : : | +--------------------| | Α + 2 + 12(Ν-1) : : | : ΕΤΙΚΕΤΑ Ν : | : : | +--------------------| | Α + 2 + 12(Ν) | | | | ΔΕΙΚΤΗΣ ΤΟΥ | | | ΕΠΟΜΕΝΟΥ | | | ΚΑΤΑΛΟΓΟΥ | | | (ΕΑΝ ΥΠΑΡΧΕΙ) | | | | | +--------------------+ | A + 6 + 12(Ν) | | +--------------------+ | | |<-----+ : TA ΔΕΔΟΜΕΝΑ ΤΗΣ : : ΣΥΓΚΕΚΡΙΜΕΝΗΣ : : ΕΤΙΚΕΤΑΣ ΜΕ : : ΜΗΚΟΣ ΜΕΓΑΛΥΤΕΡΟ : : ΑΠΟ 4 BYTE : : (ΥΠΕΡΧΕΙΛΙΣΗ) : | | +--------------------+


σχήμα 1.5

ΟΡΓΑΝΩΣΗ ΠΕΔΙΩΝ ΕΤΙΚΕΤΑΣ ΑΡΧΕΙΟΥ TIFF


Οι ετικέτες οι οποίες περιλαμβάνονται σε κάθε κατάλογο αποτελούν τη βάση της διάταξης TIFF. Ενα παράδειγμα ετικέτας φαίνεται στο σχήμα 1.6. Οπως αναφέρθηκε νωρίτερα, οι ετικέτες περιγράφουν τον τρόπο με τον οποίο θα πρέπει να μεταφραστούν τα δυαδικά δεδομένα της εικόνας που ακολουθούν. Κάθε ετικέτα έχει μήκος 12 ΒΥΤΕ και έχει απλή δομή.


: : +-------------------------------| A+2+12(J-1) | | J = ΑΡΙΘΜΟΣ +- ΤΥΠΟΣ ΕΤΙΚΕΤΑΣ (J) -| ΕΤΙΚΕΤΑΣ | | (ΔΕΣ ΣΧΗΜΑ 1.5) +-------------------------------| A+2+12(J-1)+2| | +- ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ -| | | +-------------------------------| A+2+12(J-1)+4| | +- ΜΗΚΟΣ ΠΛΗΡΟΦΟΡΙΑΣ -| | | +- ΣΕ ΜΟΝΑΔΕΣ ΠΟΥ ΟΡΙΖΕΙ -| | | +- Ο ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ -| | | +-------------------------------| A+2+12(J-1)+8| | +- ΔΕΔΟΜΕΝΑ -| | | +- Η' -| | | +- ΔΕΙΚΤΗΣ ΕΠΕΚΤΑΣΗΣ -| | | +-------------------------------| Α+2+12(J) : :

σχήμα 1.6

**ΠΕΔΙΟ ΤΥΠΟΥ ΕΤΙΚΕΤΑΣ**

Τα δύο πρώτα ΒΥΤΕ μίας ετικέτας δηλώνουν τον τύπο της ετικέτας με ένα κωδικό όνομα. Για παράδειγμα, η ετικέτα με κωδικό 282 (11Αh) μέσα σε αυτά τα δύο BYTE σημαίνει ότι αυτή η ετικέτα περιγράφει την "Χ ανάλυση" της εικόνας.


**ΠΕΔΙΟ ΤΥΠΟΥ ΔΕΔΟΜΕΝΩΝ ΕΤΙΚΕΤΑΣ**

Τα επόμενα δύο ΒΥΤΕ μίας ετικέτας περιγράφουν τον τύπο των δεδομένων που χρησιμοποιούνται για να δώσουν την πληροφορία της ετικέτας.

Υπάρχουν πέντε διαφορετικοί τύποι δεδομένων που υποστηρίζονται από τα TIFF και είναι οι ακόλουθοι:


1 = BYTE : 8-BIT (1 BYTE).
2 = ASCII : 8-BIT ASCII χαρακτήρες.
3 = SHORT : 16-BIT (δύο BYTE) μη προσημασμένοι ακέ- ραιοι.
4 = LONG : 32-bit (τέσσερα BYTE) μη προσημασμένοι                   ακέραιοι.
5 = RATIONAL : Δύο αριθμοί τύπου LONG, όπου ο πρώτος                   είναι ο αριθμητής του κλάσματος και ο                   δεύτερος είναι ο παρονομαστής του                   κλάσματος.


Για παράδειγμα, ο τύπος δεδομένων για την ετικέτα της "Χ ανάλυσης" είναι κλασματικός αριθμός ( Rational ). Ετσι, για μία εικόνα με 300 dpi (dot per inch) τα τέσσερα πρώτα ΒΥΤΕ δίνουν την τιμή 300 (ο αριθμητής) και τα επόμενα τέσσερα ΒΥΤΕ δίνουν την τιμή 1 (ο παρονομαστής).

Κανονικά θα έπρεπε να υπάρχει μόνο ένας τύπος δεδομένων για κάθε είδος ετικέττας. Εντούτοις, μερικές ετικέτες μπορούν να έχουν περισσότερους από έναν πιθανούς τύπους δεδομένων. Για παράδειγμα, οι ετικέτες " ΔΕΙΚΤΕΣ ΛΟΥΡΙΔΩΝ " και " ΓΡΑΜΜΕΣ ΑΝΑ ΛΟΥΡΙΔΑ " μπορούν να έχουν short ή long τύπο δεδομένων. Οι εφαρμογές που διαβάζουν αρχεία TIFF, θα πρέπει να ελέγχουν προσεκτικά το πεδίο που καθορίζει τον τύπο των δεδομένων της ετικέτας και να βρίσκουν σωστά το μήκος των δεδομένων.


**ΠΕΔΙΟ ΜΗΚΟΥΣ ΔΕΔΟΜΕΝΩΝ ΕΤΙΚΕΤΑΣ**

Τα επόμενα τέσσερα BYTE ενός πεδίου ετικέτας περιλαμβάνουν το μήκος της πληροφορίας που περιέχεται στην ετικέτα. Για παράδειγμα, εάν το πεδίο μήκους περιέχει το 16 και το πεδίο τύπου δεδομένων είναι long, τα δεδομένα που περιέχονται στην ετικέτα είναι (16 μονάδες μήκους * 4 BYTE/μονάδα) ή 64 BYTE.

Το μήκος των δεδομένων ASCII απαιτεί μία ειδική αναφορά. Ολες οι πληροφορίες ASCII σε ένα αρχείο TIFF τερματίζουν με ένα χαρακτήρα NULL. Μετά τον χαρακτήρα NULL, προσθέτουμε τυχαία ΒΥΤΕ, ώστε η πληροφορία να καταλαμβάνει ζυγό αριθμό ΒΥΤΕ. Εντούτοις, τα παραπάνω ΒΥΤΕ μετά τον χαρακτήρα NULL δε συμπεριλαμβάνονται στον υπολογισμό του μήκους του δεδομένου.


**ΠΕΔΙΟ ΔΕΔΟΜΕΝΩΝ Η' ΔΕΙΚΤΟΥ ΕΠΕΚΤΑΣΗΣ**

Τα τελευταία τέσσερα ΒΥΤΕ ενός πεδίου ετικέτας χρησιμοποιούνται για δύο σκοπούς. Μπορούν να χρησιμοποιηθούν σαν δείκτες προς τα πραγματικά δεδομένα της ετικέτας (όπως π.χ της ετικέτας που δίνει την "Χ ανάλυση"), ή τα ίδια τα ΒΥΤΕ να περιέχουν τα πραγματικά δεδομένα της ετικέτας. Δηλ. εάν τα πραγματικά δεδομένα χωράνε (ταιριάζουν μέσα) στα τέσσερα τελευταία ΒΥΤΕ της ετικέτας, τότε τοποθετούνται εκεί. Διαφορετικά, στα τέσσερα αυτά BYTE τοποθετείται ο δείκτης των πραγματικών δεδομένων, ξεκινώντας την αρίθμηση από την αρχή του αρχείου.


**ΣΧΟΛΙΑ**

Τα πιο πάνω μπορεί στην αρχή να φαίνονται λίγο μπερδεμένα ,όμως είναι σχεδιασμένα έτσι ώστε να γλυτώνουμε χρόνο και χώρο αποθήκευσης. Οι εφαρμογές που γράφουν και διαβάζουν αρχεία TIFF δεν χρειάζονται να κάνουν έμμεση αναφορά, εάν τα δεδομένα ταίριαζαν μέσα στην ίδια την ετικέτα. Εντούτοις, το πρόγραμμα το οποίο διαβάζει και γράφει αρχεία TIFF πρέπει να είναι σχεδιασμένο να ελέγχει πού είναι τοποθετημένα και πού θα βρει την αρχή των πραγματικών δεδομένων της ετικέτας. Αυτό μπορεί να το επιτύχει υπολογίζοντας εάν το μήκος των πληροφοριών της ετικέτας είναι 4 BYTE ή λιγότερα και μόνο τότε να τα τοποθετεί μέσα στην ίδια την ετικέτα. Το μήκος των πληροφοριών υπολογίζεται από τον πολλαπλασιασμό του πεδίου μήκους δεδομένων επί το μήκος σε ΒΥΤΕ του τύπου των δεδομένων. Π.χ. για μήκος 10 και τύπο δεδομένων Short (2 BYTE) έχουμε μήκος πληροφορίας 20 BYTE.

Μερικά παραδείγματα θα μας βοηθήσουν να καταλάβουμε τα παραπάνω. Ας ρίξουμε μία ματιά στην ετικέτα ανάλυσης που αναφέρθηκε νωρίτερα. Για αυτή την ετικέτα, ο τύπος δεδομένων είναι κλασματικός (rational). Αφού ένας κλασματικός αριθμός απαιτεί 8 BYTE, τότε τα δεδομένα του κλάσματος δεν χωράνε στο πεδίο της ετικέτας. Σε αυτή την περίπτωση, η πληροφορία στα τέσσερα τελευταία ΒΥΤΕ του πεδίου της ετικέτας θα είναι ένας δείκτης (ξεκινώντας την αρίθμηση από την αρχή του αρχείου) προς τα 8 ΒΥΤΕ της πληροφορίας για την "X ανάλυση".

Η ετικέτα για το πλάτος της εικόνας, αντίθετα, περιγράφει το πλάτος της εικόνας σε pixel (χρειάζεται μόνο 2 BYTE). Αυτή η ετικέτα έχει short τύπο δεδομένων και το μήκος της πληροφορίας είναι 1. Ετσι, η πληροφορία πλάτους της εικόνας θα τοποθετηθεί μέσα στο ίδιο το πεδίο της ετικέτας, αφού αυτή είναι μήκους δύο μόνο ΒΥΤΕ. Σημειώνουμε ότι αυτή η πληροφορία θα είναι τοποθετημένη στα δύο αριστερότερα ΒΥΤΕ του τελευταίου πεδίου της ετικέτας. Συνεπώς, τα δύο τελευταία BYTE της ετικέτας περιγραφής του πλάτους της εικόνας δεν θα περιέχουν κανένα σημαντικό δεδομένο.

Οι ετικέτες έχουν ακόμα μία ενδιαφέρουσα ιδιότητα. Μία ετικέτα μπορεί να είναι δημόσια (το οποίο σημαίνει ότι αναλύεται στα επίσημα έγγραφα για τα TIFF), ή μπορεί να είναι ιδιωτική. Τα δημόσια πεδία είναι προσεκτικά ορισμένα και περιγράφονται από όλες τις συμμετέχουσες εταίριες στα στάνταρ TIFF. Οι ιδιωτικές ετικέτες έχουν κατανεμηθεί σε μερικές εταιρίες ανάλογα με τις εφαρμογές των TIFF που χρησιμοποιούν. Οι ιδιωτικές ετικέτες χρησιμοποιούνται γενικά για να καλύπτουν χαρακτηριστικά τα οποία δεν είναι γενικού ενδιαφέροντος και χρησιμοποιούνται από μερικές μόνο εταιρίες.

Αν και οι ιδιωτικές ετικέτες ακούγονται ελκυστικές, αφού δίνουν επιπλέον ελέγχους πάνω στα TIFF, η χρήση τους είναι αποθαρρυντική. Οι ιδιωτικές ετικέτες υπονομεύουν το σκοπό ενός ανταλλασόμενου στάνταρ. Η χρήση τους επίσης μειώνει τον αριθμό των χρηστών που μπορούν να διαβάσουν ένα αρχείο. Οι εταιρίες χρησιμοποιούν τις ιδιωτικές ετικέτες για να ελέγχουν την ανάπτυξη της τεχνολογίας και να ανεβάζουν τον ανταγωνισμό με τις άλλες εταιρίες. Για παράδειγμα, εάν μία καινούργια τεχνική συμπίεσης επινοηθεί, τότε ένας μικρός αριθμός από εταιρίες οι οποίες γνωρίζουν το τρόπο μετάφρασης των ιδιωτικών ετικέτων μπορούν να συμμετέχουν στην νέα τεχνολογία και να έχουν πλεονεκτήματα απέναντι στις άλλες εταιρίες.

Περιληπτικά, τα TIFF αρχεία αποτελούνται από μία επικεφαλίδα, έναν ή περισσότερους καταλόγους, ετικέτες μέσα στους καταλόγους, και από έναν ή περισσότερους χάρτες δεδομένων εικόνας. Αυτά συνδυάζονται μεταξύ τους και παράγουν μία αποτελεσματική συγκρότηση, η οποία είναι ευέλικτη και εύκολα επεκτάσιμη για μελλοντικές απαιτήσεις.


ΠΑΡΑΔΕΙΓΜΑ ΑΝΑΛΥΣΗΣ ΕΝΟΣ ΜΙΚΡΟΥ ΑΡΧΕΙΟΥ TIFF



Στο παράδειγμα αυτό θα δούμε στην πράξη όσα έχουν αναφερθεί στο πρώτο κεφάλαιο. Αρχικά εμφανίζεται το αρχείο υπό μορφή BYTE, χωρίς αυτά να έχουν χωριστεί σε ομάδες για την αποκωδικοποίηση τους. Μετά ακολουθεί το ίδιο αρχείο χωρισμένο στα τρία κύρια τμήματα.

Πρώτα διαβάζουμε την επικεφαλίδα που αποτελείται από 8 BYTE (0 - 7). Tα δύο πρώτα BYTE (0 - 1) της επικεφαλίδας μας πληροφορούν τη διάταξη των BYTE του αρχείου TIFF. Στην περιπτωσή μας, έχουν την τιμή "49h 49h" (INTEL FORMAT), δηλ. το λιγότερο σημαντικό BYTE ακολουθείται από το περισσότερο σημαντικό BYTE. Τα δύο επόμενα BYTE (2 - 3) μας πληροφορούν για την έκδοση του αρχείου TIFF (στο παραδειγμά μας, έχουν την τιμή (002Αh)). Τα τέσσερα τελευταία BYTE (4 - 7) περιέχουν το δείκτη του πρώτου καταλόγου (στο παραδειγμά μας, είναι το (00000008h)) από όπου ξεκινά ο πρώτος κατάλογος.

Οι ετικέτες και τα δεδομένα τους που λαμβάνονται υπόψη στην εμφάνιση του αρχείου, θα εξηγηθούν στις επόμενες παραγράφους.


Ενα αρχείο TIFF (στο παραδειγμά μας, το test2tif.tif) είναι μία σειρά από BYTE, όπως φαίνεται παρακάτω:

test2tif.tif


49 49 2A 00 08 00 00 00 0C 00 FF 00 03 00 01 00 00 00 01 00 00 00 00 01 03 00 01 00 00 00 10 00 00 00 01 01 03 00 01 00 00 00 10 00 00 00 1C 01 03 00 01 00 00 00 01 00 00 00 15 01 03 00 01 00 00 00 01 00 00 00 02 01 03 00 01 00 00 00 01 00 00 00 03 01 03 00 01 00 00 00 05 80 00 00 06 01 03 00 01 00 00 00 01 00 00 00 07 01 03 00 01 00 00 00 01 00 00 00 11 01 04 00 01 00 00 00 AE 00 00 00 1A 01 05 00 01 00 00 00 9E 00 00 00 1B 01 05 00 01 00 00 00 A6 00 00 00 00 00 00 00 4B 00 00 00 01 00 00 00 20 00 00 00 01 00 00 00 88 88 22 22 88 88 22 22 88 88 22 22 88 88 22 22 88 88 22 22 88 88 22 22 88 88 22 22 88 88 22 22



Στη συνέχεια, εμφανίζουμε τα δεδομένα του αρχείου test2tif.tif, με ερμηνεία που προκύπτει από την οργάνωση TIFF, για να εντοπίσουμε τις χρήσιμες πληροφορίες των ετικετών που χρειαζόμαστε για να εμφανίσουμε σωστά την εικόνα που περιέχει.

test2tif.tif
------ HEADER ------ ΕΠΙΚΕΦΑΛΙΔΑ ------ OFFS VALUE ADDR 0000 49 49 Intel Format 0002 00 2A Version Format 0004 00 00 00 08 Pointer To First Directory ----- DIRECTORY(1) ----- ΚΑΤΑΛΟΓΟΣ ----- 0008 00 0C Number Of Tags In This Directory OFFS TAG TYPE TAG NAME LENGTH VAL/OFFS TAGS No ADDR TYPE DATA 000A 00FF 0003 Subfile Type 00000001 00000001 (1) 0016 0100 0003 Image Width 00000001 00000010 (2) 16 columns 0022 0101 0003 Image Length 00000001 00000010 (3) 16 rows 002E 011C 0003 PlanarConfigur 00000001 00000001 (4) 003A 0115 0003 SamplesperPix. 00000001 00000001 (5) 0046 0102 0003 BitsperSample 00000001 00000001 (6) 0052 0103 0003 Data Compress. 00000001 00000001 (7) 005E 0106 0003 Photom.Interp. 00000001 00000001 (8) 006A 0107 0003 Thresholding 00000001 00000001 (9) 0076 0111 0004 Strip Offset 00000001 000000AE (10) Points to image data 0082 011A 0005 X resolution 00000001 0000009E (11) Pointer for X resolution data 008E 011B 0005 Y resolution 00000001 000000A6 (12) Pointer for Y resolution data 009A 00 00 00 00 Pointer To Next Directory (0 = No More Directories) ----- TAGS OVERFLOW (DATA VALUES WITH LENGTH BIGGER THAN 4 BYTE) ----- 009E 00 00 00 4B TAGS No (11) DATA 00 00 00 01 00A6 00 00 00 20 TAGS No (12) DATA 00 00 00 01



----- IMAGE DATA ----- OFFS ROWS DATA 00AE 1 88 88 00B0 2 22 22 00B2 3 88 88 00B4 4 22 22 00B6 5 88 88 00B8 6 22 22 00BA 7 88 88 00BC 8 22 22 00BE 9 88 88 00C0 10 22 22 00C2 11 88 88 00C4 12 22 22 00C6 13 88 88 00C8 14 22 22 00CA 15 88 88 00CC 16 22 22 ------ END OF FILE ------


Η εικόνα που περιγράφει το παραπάνω αρχείο TIFF, σχεδιασμένη με χαρακτήρες κειμένου, χωρίς να ληφθούν υπόψη οι πληροφορίες όλων των ετικετών, έχει τη μορφή του παρακάτω σχήματος :


3210321032103210 1 +---+---+---+--- 2 --+---+---+---+- 3 +---+---+---+--- ( 1 --> + ) 4 --+---+---+---+- 5 +---+---+---+--- ( 0 --> - ) 6 --+---+---+---+- 7 +---+---+---+--- 8 8 , 8 8 8 --+---+---+---+- +--++--++--++--+ 9 +---+---+---+--- +---+---+---+--- 10 --+---+---+---+- 3210321032103210 11 +---+---+---+--- 12 --+---+---+---+- 2 2 , 2 2 13 +---+---+---+--- +--++--++--++--+ 14 --+---+---+---+- --+---+---+---+- 15 +---+---+---+--- 3210321032103210 16 --+---+---+---+-