Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - DrakeRoxas

Pages: [1]
1
Graphique / Re : [1.6]Sprite blanc
« le: Octobre 25, 2012, 09:44:39 pm »
ok, j'ai créer un vector<sf::Image*> pour tout stocker et ça marche.

Par contre je me demandais : Y a moyen d'enregistrer la version redimentionnée à la place de celle d'origine ? A la base je redimensionne pour gagner un peu de mémoire, mais si je doit garder l'image entière, je gagne plus grand chose :s

2
Graphique / [1.6]Sprite blanc
« le: Octobre 25, 2012, 08:11:58 pm »
Bonjour

J'aimerais faire un logiciel de comparaison d'images (j'en ai fait un sur java mais il est lent et plante aux allentours de 4000 images (out of memory)) et j'ai décider de le faire en C++. donc j'ai choisi SFML parce que blablabla, et je me suis retrouver avec une jolie image de test. Toute blanche. Alors qu'elle est verte >>

Pour résumer un peu le code :
vector<sf::Sprite*> images; // Liste des images (pointeurs)

// Charger une image redimentionnée
sf::Sprite* loadScaledImg(string name)
{
    // Chargement de l'image
    sf::Image Image;
    if (!Image.LoadFromFile(name))
        return NULL;

    // Redimmentionnement
    float w = Image.GetWidth();
    float h = Image.GetHeight();
    float scale;
    if(w >= h)
        scale = SIZE_THUMBNAIL/w;
    else
        scale = SIZE_THUMBNAIL/h;

    // Création du sprite
    sf::Sprite *Sprite;
    Sprite = new sf::Sprite(Image);
    Sprite->Scale(scale, scale);

    cout << name << endl; // Test d'existance

    return Sprite;
}

int main()
{
    // Code pour récupérer les noms d'image dans la liste "files"

    // Chargement de la liste d'images redimentionnées
    int i;
    for(i = 0; i < files.size(); i++)
    {
        sf::Sprite* s = loadScaledImg(files[i]);
        if(s != NULL)
            images.push_back(s);
    }

     // Creation de la fenêtre
     sf::RenderWindow App(sf::VideoMode(800, 600), "SFML window");

     // Attente de fermeture
     while (App.IsOpened())
     {
         sf::Event Event;
         while (App.GetEvent(Event))
         {
             // Fermeture
             if (Event.Type == sf::Event::Closed)
                 App.Close();
         }
         // Clear
         App.Clear();

         // Dessiner le sprite
         App.Draw(*images[0]); // Testé avec 0 1 2 3 (j'ai 4 images)

         // Ecrire le texte (ça marche)
         App.Draw(Text);

         // Afficher
         App.Display();
     }
     return EXIT_SUCCESS;


Dans les 4 images, j'ai une image toute verte, et 3 autres avec une croix rouge (l'une plus grande que les  autres) et j'obtient juste un carré blanc sur le rendu final (redimensionné, mais blanc).
Une idée ?

Pages: [1]