Imagen

Convertir imágenes del modo 16 al modo 32 y 33

Responder
andrew
Mensajes: 92
Registrado: 26 Nov 2020 22:48

Convertir imágenes del modo 16 al modo 32 y 33

Mensaje por andrew »

Cuando trabajé en Pitman, necesitaba encontrar una forma de convertir los sprites del modo 8 de 8 colores a 256 colores (8 bits por píxel) y a 65536 colores (16 bits por píxel). ¡Pensé que esto sería sencillo! Bueno, no fue nada sencillo.
En todos los modos, un color se puede configurar de 2 maneras:
  1. Configurando el color INK para gráficos, texto, ventana y comandos BLOCK
  2. Introduciendo el valor del color directamente en la memoria de video
Por ejemplo, en el modo 16, Colour_PAL RED es INK 2, pero el valor introducido en la memoria es $49

Creación de imágenes de 256 colores

Estaba claro desde el principio que tenía que rehacer todos los sprites para el modo 16 (256 colores) para aprovechar los 256 colores. Normalmente uso Photoshop para gráficos, así que tuve que crear una paleta de colores QL Mode 16. Al final, creé dos paletas:
  1. QL_INK_Colour_PAL: paleta de modo 16 con los colores ordenados por valor de TINTA, que ordena los colores (más o menos) por color y tono, lo que facilita la selección de los colores al dibujar.
  2. QL _Colour_PAL: con los colores ordenados por valor hexadecimal, que se utiliza para convertir la imagen en una imagen de color indexada que se puede exportar como una imagen RAW. La imagen RAW exportada tiene el mismo formato que una imagen QL _SCR en modo 16 y luego se puede cargar directamente en la pantalla QL usando LBYTES.
He adjuntado las dos paletas a continuación.

Conversión de imágenes de 256 colores a imágenes de 65536 colores

Mis sprites solo usaban un puñado de colores, por lo que solo tuve que convertir los 256 valores hexadecimales de 8 bits a los valores de 32 bits correspondientes.
La primera sorpresa para mí fue que QL en realidad tiene 2 modos de color con 65535 colores, incompatibles entre sí.
  • Modo 32: utilizado por QXl y QPC
  • Modo 33: utilizado por Q40, Q60, Q68, QIMSI GOLD
Por ejemplo, ROJO es INK 2 en todos los modos, pero el valor hexadecimal del modo 32 es $F800 y el valor hexadecimal del modo 33 es $07C0
Debido a que el modo 32 usa little endian, el valor de color rojo $F800 debe guardarse en la memoria como $00F8 (el byte menos significativo primero)
El modo 33 usa big endian, por lo que el valor de color rojo $07C0 debe guardarse en la memoria como $07C0 (el byte más significativo primero)

Pensé que esto sería fácil: solo tengo que crear una tabla con todos los valores de TINTA de 0 a 255 y sus valores correspondientes para los modos 16, 32 y 33.
Pronto descubrí que, aunque tenemos 256 valores de tinta en el modo 16, en realidad solo tenemos ¡243 colores! 13 valores de INK te darán el mismo valor hexadecimal que otras INK
p. ej., INK 29 (azul claro) e INK 37 (cian pastel) tienen el mismo valor hexadecimal $F7

También tenemos 13 valores hexadecimales que se pueden introducir en la memoria de video y se mostrarán como color en la pantalla, pero no se asignan a ningún color de INK.
Para empeorar las cosas, algunos colores de INK nos darán diferentes tonos de color en la pantalla en el modo 16, modo 32 y modo 33
Y desafortunadamente estaba usando algunos de estos colores para mis sprites.

Entonces, ¿qué podríamos hacer para convertir el modo 16 al modo 32 y al modo 33?
Tenemos 4 opciones:
  1. Utilizar las funciones SMSQE que convierten sprites e imágenes al modo de color actual
  2. Utilizar el fantástico kit de herramientas CV2NAT de Per que convierte sprites e imágenes al modo de color actual
  3. Utilizar el programa BMP de Dilwyn Jones y Bob Spelten Jr. para convertir imágenes _scr y _pic
  4. Escribir tu propio programa de conversión
Las opciones 1 y 2 son geniales, siempre que tengas el hardware necesario. Quería convertir del modo 16 al modo 33 y no tengo ningún hardware ni emulador capaz de hacerlo, así que no pude utilizar estas opciones
El programa BMP funciona muy bien, lo he probado con algunas imágenes. Pero como mis archivos de sprites usaban un formato personalizado, no podía utilizar el programa para convertirlos directamente y convertir los archivos de sprites primero al formato _scr o _pic y luego de nuevo a mi formato personalizado era mucho trabajo.
Así que opté por la opción 4.
Tuve la suerte de encontrar un artículo escrito por Dilwyn y publicado en QL TODAY VOLUMEN 8 NÚMERO 3 que convertía del modo 16 al modo 32. Y escribí un programa de conversión similar del modo 16 al modo 33 que funciona tanto con mi formato de sprite como con archivos _scr y, con un pequeño cambio, también con archivos _pic.
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
napsternds
Mensajes: 246
Registrado: 16 Sep 2019 15:02

Re: Convertir imágenes del modo 16 al modo 32 y 33

Mensaje por napsternds »

Trabajar con los modos de color del QL y compatibles es muy complcado, y lo has resuelto de una forma muy creativa y elegante. Enhorabuena!!!
Avatar de Usuario
cacharreo
Mensajes: 1731
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/

Re: Convertir imágenes del modo 16 al modo 32 y 33

Mensaje por cacharreo »

Gracias por la explicación y los ficheros, @andrew.
© cacharreo
Avatar de Usuario
badaman
Mensajes: 558
Registrado: 13 Feb 2012 19:12
Ubicación: Badajoz, España
Contactar:

Re: Convertir imágenes del modo 16 al modo 32 y 33

Mensaje por badaman »

Excelente! Cuando tenga tiempo le echaré un vistazo, porque me quedé con las ganas de implementar la visualización de imágenes en esos modos el el visor de imágenes de QL que hice a principio de año: QL SCR Viewer https://retrowiki.es/viewtopic.php?t=200040081
«ZX Spectrum+, yo soy tu padre» - Dark QL
Avatar de Usuario
Furella
Mensajes: 52
Registrado: 12 Dic 2022 02:41

Re: Convertir imágenes del modo 16 al modo 32 y 33

Mensaje por Furella »

Me gustó mucho tu artículo, Andrew!! Y gracias por el juego 👏👍
-sp3zy 81/48k/48k+/128k/+2/QL -0r1c 1/Atmos -m3s3x 1/2+ -4mstr4d 464/6128/8512 -codrg1 64 -cocbm1 64/64C -coam1 500+ -j4tar1 2600/130XE/1040STFM/4160STE/MegaSTE/Falcon -b3b3c3 Elk/B/Master/A3020 -3nt3r Ti99 Aquarius HectorHRX Apple2C IIGS TO7/70 TO8
Responder

Volver a “Sinclair QL”