IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Convertir une heightmap de png en raw


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut Convertir une heightmap de png en raw
    Bonjours les amis,

    Je veux modéliser le terrain de Puget Sound en utilisant sa heightmap http://www.cc.gatech.edu/projects/large_models/ps.html
    Afin de lire les valeurs de cette image PNG j'ai utilisé la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    bool CTerrain::LoadHeightMap(char* fileName, int length, int width)
    {
    	FILE *file;
    	file = fopen(fileName, "rb");
     
    	//check to see if there is data
    	if (file == NULL)
    		return false;
     
    	BYTE  Heights = ( BYTE *)malloc(length*width*sizeof( BYTE ));
    	fread(Heights,sizeof( BYTE ),length*width,file);
    	fclose(file);
     
    	////check to see if there is data
    	if( Heights != NULL )
    	{
    		return true;
    	}
    	else 
    		return false;
    Mais malheureusement le résultat n'était pas réel, alors j'ai converti l'image png en raw en utilisant photoshop (lire l'image png dans photoshop puis la sauvegarder en format raw) et quand j'exécute le programme en utilisant la même fonction décrite ci dessus et l'image .raw le résultat sera beaucoup meilleur. Ma question est la suivante : est ce que cette methode que j'ai utilisé (convertir png en raw) est juste ou pas ?
    Si ce n'est pas le cas, que dois je faire pour lire les vrais valeurs de cette carte?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    convertir le PNG en raw est une solution qui marche avec le code donné. par contre, il est évident que le code ne charge pas un PNG. il ouvre un fichier, lit une quantité donné de son contenu (sans vérifier que le fichier fait bien la bonne taille) et c'est tout. Pour lire un PNG, il faut :
    - soit coder une lib de lecture de PNG
    - soit utiliser une lib existante genre http://www.libpng.org/pub/png/libpng.html

    le format PNG est un format d'image structuré et compressé. On ne peut pas accéder aux données de l'image aussi naivement.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut taille image raw en megabyte
    Merci infiniment bafman ... autre chose, d'après mes connaissance pour une image en noir et blanc sa taille dans le disque dure = nombre totale de pixel /1000000 (en megabyte ou megapixel)
    Pour la carte de puget sound sa taille est de 16385*16385 ce qui donne 268,468225 megabyte mais mon fichier raw à une taille de 512 megabyte

    Est ce que quelqu'un aura la gentillesse de m'expliquer ce résultat

    Merci encore

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Chaque "pixel" du puget est codé sur 2 octets afin d'avoir une dynamique suffisante dans la dimension verticale (entre 0 et 65536 au lieu de 0->255 sur un codage en 1 byte).

    Et on divise par 1024, 1024*1024, ... On est en puissance de 2, jeune padawan !
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    Merci Emmanuel j'ai bien compris la première partie mais qu'entendez vous par en divise par 1024, 1024*1024, ... ?

    Citation Envoyé par Emmanuel Deloget Voir le message
    Et on divise par 1024, 1024*1024, ... On est en puissance de 2, jeune padawan !

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Par défaut
    Citation Envoyé par fleurdelys77 Voir le message
    Merci Emmanuel j'ai bien compris la première partie mais qu'entendez vous par en divise par 1024, 1024*1024, ... ?
    En informatique on compte en puissance de 2 ==> 2^10 = 1024

    Du coup 1Mo = 1024ko = 1024 * 1024 octets

    PS : des fois ce principe n'est pas appliqué à la lettre par les fournisseurs de disques qui divisent par 1000 (du coup çà donne une capacité plus grande...)

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    Les amis j'ai rencontré un autre problème d’après Emmanuel Deloget :
    Citation Envoyé par Emmanuel Deloget Voir le message
    Chaque "pixel" du puget est codé sur 2 octets afin d'avoir une dynamique suffisante dans la dimension verticale (entre 0 et 65536 au lieu de 0->255 sur un codage en 1 byte).
    Puisque les pixels sont codés sur 2octets alors je dois lire les pixels avec un short unsigned c-à-d
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unsigned short Heights = ( unsigned short *)malloc(length*width*sizeof( unsigned short));
    fread(Heights,sizeof( unsigned short ),length*width,file);
    Mais le résultat est catastrophique est ce que quelqu'un aura la gentillesse de m'éclaircir les choses
    Merci encore d'avance

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Pourquoi unsigned ?

    Géneralement, ce sont des valeurs signées, de manière à pouvoir stocker les altitudes négatives (donc en dessous de 0). J'ai donné les limites 0->65535 pour t'éclairer sur la raison qui fait qu'on utilise généralement 2 octets, pas pour dire que la valeur n'était pas signée (d'autant plus que le Puget Sound contient un bras d'océan, si je ne m'abuse).

    Est-ce que tu peux nous donner un lien à partir duquel tu as récupéré les données, afin que je puisse y jeter un coup d'oeil ?
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Convertir une raw-string en string
    Par tyrtamos dans le forum Général Python
    Réponses: 5
    Dernier message: 11/04/2015, 14h00
  2. Réponses: 23
    Dernier message: 12/02/2014, 12h27
  3. Convertir un JPG ou PNG en RAW avec GIMP
    Par akrogames dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 31/10/2010, 11h42
  4. [CF] Convertir une image en RAW
    Par Kentin dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 28/07/2009, 11h12
  5. Comment convertir une image bmp en png??
    Par Leclair2000 dans le forum Langage
    Réponses: 2
    Dernier message: 03/05/2005, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo