Hola, que tal! Me llamo Fran y estaba aprendiendo un poco de SDL para un proyecto libre recientemente comenzado. El proyecto se basa en simular el funcionamiento de otro y por ello requiere algunos aspectos un tanto extravagantes como el siguiente, que no sé si alguien se lo habrá encontrado en alguna ocasión:
A la hora de trabajar con sprites en este proyecto se necesita tratar con imágenes de 8 bit, por tanto utiliza un bloque de paleta y luego un bloque de mapa de bits haciendo referencia a esos valores del índice de paleta (a diferencia de las de color verdadero, que no tienen esa paleta sino que en el propio mapa de bits se define el valor de color por cada "píxel").
Así pues, en este caso el formato de píxel es de 8 bit y se puede tratar con la paleta. El problema viene con la transparencia. SDL trata la transparencia por un valor de color (ColorKey) y los archivos de sprite que necesitan leerse tienen definida la transparencia por el índice de paleta.
En principio con leer el valor de color de ese índice 0 sería suficiente, con algo así como surface->format->palette->colors[0] si no me equivoco.
El problema viene cuando en esa misma paleta encuentras que por ejemplo el color número 0 de la paleta que será el transparente vale 255,0,255 y el número 43 y el 129 (por decir algunos) también tienen como valor 255,0,255. Eso supone que esos colores también se vean transparentes, por las características del propio SDL.
La solución al problema de colores duplicados sería aplicar por ejemplo sumarle +1 al componente azul, que es el que menos diferencia percibirán nuestros ojos surface->format->palette->colors[43].b + 1 y si ya vale 255 como en este ejemplo entonces - 1 (quedando 255,0,254). Todo ello se podría meter en un for para que recorriera la paleta entera comparando si el valor RGB del índice 0 coincide con el resto de los 256 colores.
¿Alguien se ha encontrado con este caso? He mirado en listas de correo y demás y no he encontrado ninguna situación similar.
Un saludo y suerte!