1.20 ΠΑΡΑΔΕΙΓΜΑ ΑΡΧΕΙΟΥ ΣΥΜΠΙΕΣΜΕΝΟ ΜΕ PACK BITS


Στην επόμενη παράγραφο βλέπουμε πως εμφανίζεται το αρχείο που θα εξετάσουμε αν το διαβάσουμε BYTE-BYTE.


testmon4.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 20 00 00 00 01 01 03 00 01 00 00 00 14 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 00 7F FF FE 00 FF FD FF FD FF FD FF FD FF FD FF FD FF FD FF FD FF 01 FF F7 FF FF FD FF FD FF FD FF FF FF 01 DF FF FD FF FD FF FD FF 00 FB FE FF FD FF FF FF FF FE


Από την ερμηνεία των ετικετών του αρχείου, σε γενικές γραμμές συμπεραίνουμε ότι η εικόνα που περιγράφεται από αυτό το αρχείο TIFF έχει διαστάσεις 32x20 PIXEL, είναι μονόχρωμη και χρησιμοποιεί τη μέθοδο συμπίεσης 8005h (Pack Bits). Για αναλυτικότερες πληροφορίες, πρέπει να αναφερθείτε σε κάθε μία ετικέτα ξεχωριστά, αφού κάθε μία περιέχει χρήσιμες πληροφορίες.


Program : testmon4.tif

------ HEADER ------ OFFS VALUE 0000 49 49 Intel Format 0002 00 2A Version Format 0004 00 00 00 08 Pointer To First Dir. ----- DIRECTORY ----- 0008 00 0C No Of Tags In This Dir. OFFS TAG TYPE TAG NAME LENGTH VAL/OFFS 000A 00FF 0003 Subfile Type 00000001 00000001 0016 0100 0003 Image Width 00000001 00000020 0022 0101 0003 Image Length 00000001 00000014 002E 011C 0003 PlanarConfigur 00000001 00000001 003A 0115 0003 SamplesperPix. 00000001 00000001 0046 0102 0003 BitsperSample 00000001 00000001 0052 0103 0003 Data Compress. 00000001 00008005 005E 0106 0003 Photom.Interp. 00000001 00000001 006A 0107 0003 Thresholding 00000001 00000001 0076 0111 0004 Strip Offset 00000001 000000AE 0082 011A 0005 X resolution 00000001 0000009E --> 0000004B / 00000001 008E 011B 0005 Y resolution 00000001 000000A6 --> 00000020 / 00000001 009A 00 00 00 00 No More Directories
----- IMAGE DATA ----- OFFS ROWS DATA 00AE 1 00 7F FF FE 00 FF 00B4 2 FD FF 00B6 3 FD FF 00B8 4 FD FF 00BA 5 FD FF 00BC 6 FD FF 00BE 7 FD FF 00C0 8 FD FF 00C2 9 FD FF 00C4 10 01 FF F7 FF FF 00C9 11 FD FF 00CB 12 FD FF 00CD 13 FD FF 00CF 14 FF FF 01 DF FF 00D4 15 FD FF 00D6 16 FD FF 00D8 17 FD FF 00DA 18 00 FB FE FF 00DE 19 FD FF 00E0 20 FF FF FF FE ------ END OF FILE ------


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

32103210321032103210321032103210
1 +--------------+-------+-------- 2 -------------------------------- - = 1 3 -------------------------------- 4 -------------------------------- + = 0 5 -------------------------------- 6 -------------------------------- 7 -------------------------------- 8 -------------------------------- 9 -------------------------------- 10 ------------+------------------- 11 -------------------------------- 12 -------------------------------- 13 -------------------------------- 14 ------------------+------------- 15 -------------------------------- 16 -------------------------------- 17 -------------------------------- 18 -----+-------------------------- 19 -------------------------------- 20 -----------------------+-------+

Παρακάτω θα δούμε πώς πρέπει να ερμηνεύσουμε τα δεδομένα της πιο πάνω συμπιεσμένης εικόνας, ώστε να γίνει σωστά η αποσυμπίεση της με τον αλγόριθμο PACK BITS.

Ξεκινώvτας, διαβάζουμε τα BYTE για την πρώτη γραμμή. Το πρώτο BYTE (θέση 0) που διαβάζουμε έχει τιμή "00". Αυτό, σύμφωνα με το βήμα 2 του αλγόριθμου, σημαίνει ότι το επόμενο BYTE (θέση 1) είναι το πρώτο BYTE δεδομένων της αποσυμπιεσμένης εικόνας και έχει τιμή "7F". Σειρά έχει τώρα να διαβαστεί το επόμενο BYTE (θέση 2), που έχει τιμή "FF"(-1). Αυτό, σύμφωνα με το βήμα 3 του αλγόριθμου, σημαίνει ότι το επόμενο BYTE επαναλαμβάνεται δύο (- (-1) + 1) φορές σαν δεδομένο της αποσυμπιεσμένης εικόνας, άρα τα δύο επόμενα BYTE της εικόνας (δεύτερο και τρίτο) θα έχουν τιμή "FE". Το επόμενο BYTE (θέση 4) που διαβάζουμε έχει τιμή "00". Αυτό σύμφωνα με το βήμα 2 του αλγόριθμου, σημαίνει ότι το επόμενο BYTE (θέση 5) είναι το επόμενο BYTE της εικόνας (τέταρτο) και έχει τιμή "FF". Παρατηρούμε ότι έχουν συμπληρωθεί τα 20h BIT που ορίζει η ετικέτα "Image Width" σαν μήκος γραμμής, άρα τα επόμενα BYTE που θα διαβάσουμε θα αναφέρονται στη δεύτερη γραμμή της εικόνας.

7 F , F E , F E , F F
+--++--++--++--++--++--++--++--+
1 +--------------+-------+-------- 32103210321032103210321032103210

Διαβάζουμε τώρα τα BYTE για τη δεύτερη γραμμή εικόνας. Το πρώτο BYTE που διαβάζουμε έχει τιμή FD (-3). Αυτό, σύμφωνα με το βήμα 3 του αλγόριθμου, σημαίνει ότι το επόμενο BYTE επαναλαμβάνεται 4 (- (-3) + 1) φορές σαν δεδομένο της αποσυμπιεσμένης εικόνας, άρα τα επόμενα 4 BYTE της εικόνας θα έχουν τιμή FF. Παρατηρούμε ότι έχουν συμπληρωθεί τα 20h BIT που ορίζει η ετικέτα "Image Width" σαν μήκος γραμμής, άρα τα επόμενα BYTE που θα διαβάσουμε θα αναφέρονται στη τρίτη γραμμή της εικόνας.

F F , F F , F F , F F
+--++--++--++--++--++--++--++--+
2 --------------------------------
32103210321032103210321032103210

Με τον ίδιο τρόπο ερμηνεύουμε και τα υπόλοιπα δεδομένα, έως ότου σχηματίσουμε όλες τις γραμμές της αποσυμπιεσμένης εικόνας.