2012-07-22 11 views
1

Au début désolé pour mon anglais.Ouverture bitmap en C++

Mon but est de charger le tableau rgb à partir du bitmap. Mais il y a une différence entre la taille de l'image et le produit de height * width * 3. Quand je lis au sujet du format de bmp je remarque quand le widht% 4 est! = 0 alors je dois ajouter à la largeur quelques chiffres à l'équilibre. (largeur% 4 == 1 je dois ajouter 3, largeur% 4 == 2 je dois ajouter 2 etc.) La taille de l'image est 1 442 454 octets, la hauteur est 601 et la largeur est 801. 804 * 600 * 3 == 1 441 800 et c'est plus que la taille de l'image. 801 * 600 * 3 == 1441800 il faut moins que la taille de l'image (même si j'ajoute 54 bits d'en-têtes). Qu'est-ce que je dois faire pour le lire correctement? (En-têtes sont chargés correctement)

+2

juste pour le plaisir des mathématiques, '804 * 600 * 3' n'est pas' 1441800'. –

Répondre

4

Notez que chaque ligne est complétée à un multiple de 4 octets (non pixels). Donc, si vous avez 801 pixels par ligne et que chaque pixel a 3 octets (RVB), vous avez 801 * 3 = 2403 octets par ligne et cela sera complété avec un octet supplémentaire de 2404 octets. La taille de bitmap sera donc 601 * 2404 = 1444804 octets. Si toutefois votre largeur de ligne est seulement de 800 pixels alors vous avez 800 * 3 = 2440 octets par ligne qui est déjà un multiple de 4 octets donc il n'y aura pas d'octets de pad supplémentaires et la taille de l'image sera 601 * 2400 = 1442400 octets. Avec un en-tête de 54 octets, cela donne 1442454 octets.

Conclusion: taille de l'image est en fait 801 x 600, 801 x 601. non