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 ?