J'ai tenté de faire le découpage précédemment recommandé.
Hors je n'arrive pas affiché la texture découpé... Hors j'ai bien vérifié avec un saveToFile() pour voir que je découpe correctement. Je ne vois pas ou est ma stupide erreur
J'ai fais un projet au code minimal,
Voici le code :
#include <SFML/Graphics.hpp>
#include <iostream>
std::vector<sf::Texture*>* decoupageTilesetEnTexture(sf::Image *img);
int main()
{
sf::Image img;
if (img.loadFromFile("tileset.jpg"))
{
std::vector<sf::Texture*> *listeTexture = decoupageTilesetEnTexture(&img);
std::cout << "nbDeTexture = " << listeTexture->size() << std::endl;
sf::RenderWindow window(sf::VideoMode(500, 500), "SFML works!");
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
sf::Sprite* sprite = new sf::Sprite(*(listeTexture->at(0)));
window.draw(*sprite);
window.display();
delete sprite;
}
}
return 0;
}
std::vector<sf::Texture*>* decoupageTilesetEnTexture(sf::Image *img)
{
unsigned int nb_tour_x = img->getSize().x/sf::Texture::getMaximumSize();
unsigned int nb_tour_y = img->getSize().y/sf::Texture::getMaximumSize();
unsigned int maximum_size_x;
unsigned int maximum_size_y;
if (sf::Texture::getMaximumSize() > img->getSize().x)
{
maximum_size_x = img->getSize().x;
}
else
{
maximum_size_x = sf::Texture::getMaximumSize();
}
if (sf::Texture::getMaximumSize() > img->getSize().y)
{
maximum_size_y = img->getSize().y;
}
else
{
maximum_size_y = sf::Texture::getMaximumSize();
}
std::vector<sf::Texture*> *listeTexture = new std::vector<sf::Texture*>();
//std::string var;
for (unsigned int x = 0; x<=nb_tour_x; x++)
{
for (unsigned int y = 0; y<=nb_tour_y; y++)
{
sf::Image newImg;
unsigned int offset_x = maximum_size_x*x;
unsigned int offset_y = maximum_size_y*y;
unsigned int size_x = maximum_size_x;
unsigned int size_y = maximum_size_y;
if ((offset_x+maximum_size_x) > img->getSize().x)
{
size_x = img->getSize().x-offset_x;
}
if ((offset_y+maximum_size_y) > img->getSize().y)
{
size_y = img->getSize().y-offset_y;
}
newImg.create(size_x, size_y, sf::Color::Blue);
//newImg.copy(*img, 0, 0, sf::IntRect(offset_x, offset_y, offset_x+size_x, offset_y+size_y));
//var+= "+";
//newImg.saveToFile(var+"test.png");
sf::Texture *texture = new sf::Texture();
texture->loadFromImage(newImg, sf::IntRect(0,0,size_x, size_y));
listeTexture->push_back(texture);
}
}
return listeTexture;
}
Merci a ceux qui prendrons la peine de regardé mon code,
Cordialement.