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:enter image description here 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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top