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

DirectX Discussion :

[C#] générer les mipmaps d'une image .bmp?


Sujet :

DirectX

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut [C#] générer les mipmaps d'une image .bmp?
    Je débute dans DirectX managed, et je souhaite développer un programme qui convertit des images .bmp en fichier .dds.
    J'ai reussi à effectuer cette conversion, mais je n'ai pas les mipmaps dans le fichier .dds.
    J'ai pourtant demandé la génération automatique de ses mipmaps, mais ca ne veut rien savoir.

    voila mon code:

    ( " bit " est mon image .bmp)
    ( " fileName " est le nom du fichier contenant l'image .bmp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                        Texture texture = new Texture(device, bit,Usage.AutoGenerateMipMap , Pool.Managed);
                        texture.GenerateMipSubLevels();
                        TextureLoader.Save(fileName.Substring(0,fileName.Length-4) + ".dds", ImageFileFormat.Dds, texture);
    Je serais ravi de recevoir un petit coup de pouce

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    AutoGenerateMipMap c'est pour utiliser la génération en hardware si je ne me trompe pas. Pour générer les mipmaps lors du chargement de la texture, il faut spécifier 0 (ou le nombre que tu en veux) dans le bon paramètre lors de l'appel à D3DXCreateTextureFromFile (en C++, aucune idée de l'équivalent en C#).

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    ok, je vais essayer de trouver ca.
    Si je trouve je posterai le code correspondant.
    merci.

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Est ce que cette commande n'est pas sensé créer les mipmaps d'une texture?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    texture.GenerateMipSubLevels();
    Parceque j'ai beau l'utiliser apres la creation de ma texture .bmp,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texture = TextureLoader.FromFile(device, fichiersource, 0, 0, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed, Filter.Linear, Filter.Linear,0);
    j'ai toujours pas les mipmaps

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par ashhorn
    Est ce que cette commande n'est pas sensé créer les mipmaps d'une texture?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    texture.GenerateMipSubLevels();
    Non, elle les génère, ce qui est différent. En l'occurence elle ne va pas créer de niveaux de mipmaps, mais simplement régénérer ceux qui existent. Cette fonction est utile principalement lorsque tu modifies à la main la surface de niveau 0 et que tu veux recalculer les mipmaps.

    Citation Envoyé par ashhorn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texture = TextureLoader.FromFile(device, fichiersource, 0, 0, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed, Filter.Linear, Filter.Linear,0);
    j'ai toujours pas les mipmaps
    Là ce n'est pas normal, car en spécifiant 0 comme 5ème paramètre (le nombre de mipmaps) tu devrais les avoir tous.
    Comment sais-tu qu'il n'y a aucun niveau de mipmaps ? Tu as consulté la propriété LevelCount de ton objet Texture ?

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Quand je fais un LevelCount sur ma texture, il me dis qu'il y a un seul level.
    Moi non plus je ne comprend pas pourquoi il ne veut pas les générer :s
    Peu etre est ce une histoire de filtre... mais j'ai quand meme des doutes.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et en virant Usage.AutoGenerateMipMap ?

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    il n'aime pas du tout...
    Si je mets Usage.None, ça bloque la génération des mipmaps, alors j'ai mis en Dynamique, et la il me sort une erreur lors de l'execution. Malheureusement les infos fournies avec l'erreur sont inexistantes, donc je ne sais pas pourquoi il bronche :s

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Bizarre

    Si je mets Usage.None, ça bloque la génération des mipmaps
    Qu'est-ce que tu veux dire par là ?

    Est-ce que ta texture a des dimensions en puissance de 2 ?

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    oui ma texture est une puissance de 2

    Sinon pour le Usage.None, j'ai confondu avec le Format.None dans le TextureLoader.FromFile, autant pour moi. Je vais tester avec Usage.None desuite.

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    OMG, ca marche !!!

    Voila le code avec lequel je crée une texture à partir d'une image BMP,
    Je crée le nom de fichier dans lequel je veux mettre ma texture en .DDS,
    Je sauvegarde mon image BMP dans un fichier ( ma premiere image BMP que j'ai mis dans une texture ne provenais pas d'un fichier, elle est crée par un petit morceau de code).
    Ensuite je crée ma texture mipmapped a partir de mon fichier .BMP,
    et enfin je sauvegarde cette texture en .DDS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Texture texture = new Texture(device, bit,Usage.None, Pool.Managed);
    destName = fileName.Substring(0, fileName.Length - 4) + ".bmp";
    TextureLoader.Save(destName, ImageFileFormat.Bmp, texture);
    texture = TextureLoader.FromFile(device, destName, 0, 0, 0, Usage.None, Format.A8R8G8B8, Pool.Managed, Filter.Linear, Filter.Linear, 0);
    TextureLoader.Save(fileName.Substring(0, fileName.Length - 4) + ".dds", ImageFileFormat.Dds, texture);
    Je sais c'est un peu compliqué, mais j'ai trouvé que cette bidoulle pour arriver à mes fins.
    Par contre je suis preneur si quelqu'un a une méthode plus propre.

    En tout cas, merci Loulou24

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Content que ça marche !

    Pense à cliquer sur

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/08/2008, 16h24
  2. générer une image BMP dans RTLINUX
    Par foufa007 dans le forum Administration système
    Réponses: 5
    Dernier message: 03/04/2007, 10h15
  3. [C#] Comment convertir une image bmp en jpg !!!
    Par vandeyy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2004, 20h37
  4. inserer une image BMP dans un fichier rtf
    Par Alice9 dans le forum MFC
    Réponses: 17
    Dernier message: 06/07/2004, 10h31
  5. [BPW] Impression d'une image BMP
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 21/08/2003, 14h34

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