|
I file compressi
di MioMap ed iGo, rispetto alle normali immagini Bitmap di windows, hanno il grande vantaggio di immagazzinare le medesime informazioni sfruttando minore spazio. Necessita' che e' molto sentita in un dispositivo come e' il nostro navigatore.
Standard di immagini come i GIF o i JPG non sono purtroppo utilizzabili in quanto hanno una perdita di qualita'. Occorre quindi utilizzare un metodo di compressione alternativo.
Uno degli standard di compressione e' il formato
"RLE"
, ma i programmatori di MioMap e iGO si dovevano
distinguere...perciò hanno creato un loro standard...
Partendo da queste informazioni trovate su questo
forum
possiamo iniziare a smanettare sui nostri bitmap compressi.
Si tratta della spiegazione dell'intestazione del file bitmap di MioMap.
|
|
1. Header of "RL", two ASCII characters (a regular .bmp file has "BM")
2.word = 0x0000 - with unknown function, I just see zero so far
3. image widthin pixels, i.e. 40 01 in file = 0x0140 = 320 pixels wide
4. image height inpixels, 0x0011 = 17 pixels high
5. number of colors used
in image = Nc = 0x0002 = 2 (out of 255 or 256 possible)
6. (probably) number of lines of pixel data = Nd = 0x0011 = 17 lines
(I always saw it match #4 above)
7. AColor Lookup Table (each color 2 bytes), one for each color number (Cn),
inCompressed format (leaves out colors for the unused color numbers):
(these16-bit colors are ordered by pixel color number, Cn = 0 through FF)
The firstcolor value (where 0xF81F is apparently a transparent "color")
8. morecolors, as needed, to make Nc words, i.e. 0x2945 is a dark pixel
9. Nb(1 ...Nd) as a block of Nd single bytes, where each byte is a count of
the"compressed-data" bytes used to describe one line, with one entry
(one byte)for each line. Thus, a 17-line image has 17 bytes here.
10. The compresseddata for the first line, in groups of 2 bytes (Cn, Nr),
where Cn is the colornumber and Nr is the number of same-color pixels.
Thus, a 320-pixel linemight be described in 6 bytes: FE 01 FF FE 01 41,
with 1 pixel of Cn=FE, 254pixels of Cn=FF, and 65 pixels of Cn = 01 for
a total of 320 pixels, seemingto use 3 "colors".
11. The compressed data for each of the remaining Nd lines
|
|
Quindi...i due caratteri 'RL', una word, informazioni di larghezza e altezza, numero di colori, palette colori ecc..
Da notare che il primo colore della palette e' la "trasparenza".
Partendo da questa semplice immagine presa a caso...

...ed analizzando il suo interno in formato esadecimale...

possiamo notare un gruppo di informazioni ripetute. In particolare il codice
FE e' un codice di escape.Indica che i due byte seguenti
devono essere trattati in modo particolare. Il primo byte che segue il codice
FE indica il colore nella palette definita
nell'header del file. Il secondo byte indica che quel singolo colore
andra' ripetuto n volte sull'asse X della bitmap.
Ad esempio la sequenza FE 02 11
indica che il 2° colore della palette deve essere ripetuto 17 volte (11 esadecimale).
Ogni riga dell'immagine viene così tradotta in una serie di terne numeriche (la somma delle ripetizioni dà sempre
come risultato la larghezza dell'immagine).
Discorso un po' più complesso riguarda i file BMP di "nuova generazione" dei sistemi Miomap 2008 e iGo 2008.
Poichè non sempre questi file si limitano ad una palette di 256 colori la terna numerica è leggermente diversa.
Al posto del codice FE avremo un altro codice che ci
indica anche un "moltiplicatore" aggiuntivo.
|