Bitmap errate; com'è possibile
-
27-10-2019 - |
Domanda
Sto cercando di analizzare le targhe con il codice C ++. Il punto non è come arrivarci velocemente, perché voglio andare al processo di creazione di questo codice C ++ e imparare come farlo.
Problema:
I byte nel file bitmap non si sommano! Il file bitmap: http://ictmdeklerk.nl/cor.bmp
Perché non si sommano:
Sto usando immagini bitmap a 24 bit (*.bmp file). So che la bitmap è costruita con BMPFileHeader e Bmpinfoheader, che Togehter consuma 54 byte.
Ora, l'immagine è larga 1350 pixel e alta 740 pixel, il che si traduce in 999000 pixel.
Poiché il file è 24 bit, ci sono 3 byte per pixel. 999000 * 3 = 2997000 byte necessary per l'immagine. Ma la dimensione dell'immagine (bisizeImage) nel Bmpinfoheader afferma che l'immagine è 2998480 byte! La dimensione del file è 2.998.534 byte - 54 byte di intestazione = 2.998.480. Quindi l'intestazione è ancora 54 byte. Nessun meta -dati extra lì. Quando dividerò 2.998.480 / 3 byte per pixel ottengo 999493,33 pixel! Non è nemmeno un numero rotondo!
Mi sta facendo impazzire. In che modo Windows sa mai come mostrare questa immagine senza spostare pixel o colori o altro?
Qualcuno può spiegarmi da dove provengono questi pixel/byte extra? E come affrontarli?
Grazie in anticipo!
Soluzione
I file BMP padano ogni riga ai confini a 4 byte.
La tua immagine è
(1350px largo) x (3 byte per pixel) = 4050 byte per riga. 4050 non è divisibile per 4, ma 4052 è Quindi 2 byte per ogni riga (2 * 740 = 1480 byte) vengono aggiunti come imbottitura all'immagine.
La dimensione del file è quindi 2997000 byte immagine + 54 byte header + 1480 byte ROW padding = 2998534 byte, che è la dimensione effettiva del file.