czy da się zmienić jeden kolor tekstury na inny?
Da się.
A jak? Bo samo kolorowanie zmieni mi wszystkie kolory a zamiana tego na 2 tekstury lub lista wierzchołków jest mało wygodna...
Jak wreszcie napiszesz, co rozumiesz przez zmienić jeden kolor tekstury na inny
to się zobaczy.
Chcę wypełnić wszystkie pixele tekstury w danym kolorze innym kolorem. Czyli np wszystkie czerwone zamienić na niebieskie bez zmiany innych
Prozaiczny przykład !!nie używać na produkcji!!:
auto &image = your_image;
auto &searched_color = your_searched_color;
auto &new_color = your_new_color;
auto size = image.getSize();
for(size_t y = 0; y < size.y; ++y){
for(size_t x = 0; x < size.x; ++x){
auto current_pixel_color = image.getPixel(x, y);
if(current_pixel_color == searched_color)
image.setPixel(x, y, new_color);
}
}
Normalnie chciałbyś hurtem wszystko pozmieniać, niestety sf::Image::getPixelsPtr()
zwraca pixele tylko do odczytu, dlatego musiałbyś się bawić w skopiowanie, podmienienie i upchnięcie w jakimś formacie, który pozwoli Ci na załadowanie całości przez sf::Image::loadFromMemory()
Powinieneś użyć sf::Image::create (unsigned int width, unsigned int height, const Uint8 *pixels)
zapewniając pixele w postaci twoich zmian naniesionych na kopię sf::Image::getPixelsPtr()
i wrzucić całość przez sf::Image::copy(...)