Supuestamente, y sin saber qué estás usando para hacerlo, si cargas un archivo de gráfico puedes obtener el color de cada pixel, da igual si el archivo gráfico es con paleta o no. Y todo lo que conozco usa un formato de 32bits RGBA en el que sacar las componentes es trivial.
Es que creo que no estoy entendiendo muy bien tu pregunta
![Sonrisa :)](./images/smilies/icon_e_smile.gif)
Con qué paleta comparar ¿qué? Por eso te preguntaba por cómo genera el modo este los colores.
Por ejemplo, en la ULA+ las paletas son de 3 bits para R, 3 para G y 2 para B. De ese modo, teniendo un color (r, g, b) de una imagen, que tendrá 8 bits por componente, sólo tienes que hacer R = r >> 5; G = g >> 5; B = b >> 6 para obtener el color de ULA+.
Dependiendo del formato de paletas del modo este de ZX-Uno, habrá que hacer una cosa u otra.
En todos mis conversores trabajo por aproximación pura y dura. Como son para uso propio, sé con qué colores tengo que pintar en mi editor gráfico preferido para que la conversión sea como yo quiero. Así, siguiendo el ejemplo de la ULA+, yo dibujaría eligiendo colores que cumpliesen los requisitos de 8 niveles para R o G y cuatro para B.
Si te refieres a que quieres cuantizar primero para obtener una paleta y luego convertir en base a esa paleta, necesitarás dos pasadas... Hay varios algoritmos. Por ejemplo, sabiendo los bits por componente, vas recorriendo la imagen, convirtiendo los pixels, y contando cuántos píxels hay de cada color que vayas encontrando (ya convertidos). Luego coges los 16 colores más repetidos, y recorres de nuevo la imagen aproximando los demás colores a esos.
Otra forma algo más compleja (matemáticamente) es elegir los 16 colores de todos los que has encontrado que cumplan un espectro mayor. Pero para eso hay que cambiar a HLS y usar coordenadas polares (OUCH). Esto lo vi hace muuucho tiempo y apenas recuerdo nada.
De todos modos estas cosas no suelen salir bien. Es preferible que el diseñador trabaje con las restricciones en mente y que el conversor no tenga que adivinar nada. Si quieres hacerlo más universal, siempre puedes requerir que en la imagen haya 16 pixels en algún sitio definido que contengan los 16 colores.
Personalmente, prefiero las herramientas de linea de comandos que pueda meter en un batch. Así el trabajo manual es mínimo. En Ninjajar! cambiamos tantas veces los mapas y los gráficos... Pero cientos de veces. Y sólo había que ejecutar un make.bat para reconstruirlo todo y volver a probar
![Sonrisa :)](./images/smilies/icon_e_smile.gif)
Pero entiendo que hay otras formas de trabajar.