Bonjour à tous !
Je suis en train de m'initier à la programmation OpenGL en Java et je suis en train de coder une classe qui me permet de charger une image, d'en extraire la longueur / hauteur et qui stocke une suite d'octets représentants les couleurs RGB (un byte pour chaque couleur) avec un byte pour Alpha si approprié.
Je m'occupe pour l'instant de charger les fichiers .tga, et ça fonctionnait bien quand je chargeais des fichiers de 256x256. Mais j'ai essayé avec un fichier de 128x128 et ça foire bien comme il faut.
Il y a une contradiction entre ce que je lis avec un éditeur héxadécimal et l'interprétation de "java".
En gros j'ai un tableau de byte[] que je remplis avec les données du header du fichier.
Pour avoir la longueur je fais :
Ce me permet repasser en décimal.
Code : Sélectionner tout - Visualiser dans une fenêtre à part width = header[1] * 256 + header[0];
Mon éditeur héxa (je lui ai demande de m'afficher directement la valeur décimale) me dit : header[1] = 1 et header[0] = 0 (En héxa, il me dit 00 01)
En début j'ai bien header[1] = 1 et header[0] = 0
Ce qui donne :
Pour un fichier qui fait 128 pixels de long, je vois header[1] = 0 et header[0] = 128 dans l'éditeur héxadécimal (soit 00 80 en héxa), mais là, pour une raison qui m'est inconnue, le débugger m'affiche header[0] = -128 et header[1] = 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part width = 1 * 256 + 0 = 256
Une fois dans la formule (juste pour le fun), ça fait :
Soit une longueur de -128 pixels.
Code : Sélectionner tout - Visualiser dans une fenêtre à part width = 0 * 256 - 128
Savez-vous pourquoi Java me sort un nombre négatif de son chapeau ?
Partager