Mezcla alfa más rápida usando una tabla de búsqueda?

He creado una tabla de búsqueda que le permite combinar dos canales de un solo byte (256 colores por canal) utilizando un canal alfa de un solo byte sin valores de coma flotante (por lo tanto, no hay conversiones de flotación a int). Cada índice en la tabla de búsqueda corresponde al valor de 256 de un canal, en relación con un valor alfa.

En general, para calcular completamente una mezcla RGB de 3 canales, requeriría dos búsquedas en la matriz por canal, más una adición. Esto es un total de 6 búsquedas y 3 adiciones. En el siguiente ejemplo, dividí los colores en valores separados para facilitar la demostración. Este ejemplo muestra cómo combinar tres canales, R G y B por un valor alfa que varía de 0 a 256.

BYTE r1, r2, rDest;
BYTE g1, g2, gDest;
BYTE b1, b2, bDest;

BYTE av; // Alpha value
BYTE rem = 255 - av; // Remaining fraction

rDest = _lookup[r1][rem] + _lookup[r2][av];
gDest = _lookup[g1][rem] + _lookup[g2][av];
bDest = _lookup[b1][rem] + _lookup[b2][av];

Funciona muy bien. Preciso como puede obtener utilizando 256 canales de color. De hecho, obtendría los mismos valores exactos utilizando los cálculos reales de coma flotante. La tabla de búsqueda se calculó usando dobles para empezar. La tabla de búsqueda es demasiado grande para caber en esta publicación (65536 bytes). (Si desea una copia, envíeme un correo electrónico a [email protected], pero no espere una respuesta hasta mañana porque me voy a dormir ahora).

¿Entonces, qué piensas? ¿Vale la pena o no?

Respuestas a la pregunta(3)

Su respuesta a la pregunta