2011-07-21 8 views
5

He notado que todos los que trabajan con el objeto Canvas se multiplican por 4's (RGBA) en el pixelbuffer. He trabajado mucho con la codificación de píxeles nativos (Delphi y C++) y reconozco esto como una RGBA de 32 bits normal (codificación 888-8). Mi pregunta es: ¿hay alguna forma de detectar el formato de píxel del navegador? Si está ejecutando en un dispositivo compatible con 16 bits (codificación 565) o 24 bits (codificación 888), será muy lento si el navegador tiene que degradar los mapas de bits para cada redibujado. Especialmente cuando se trata de mezcla alfa.Javascript Canvas formato de pixel

También (y esto es secundario): ¿Es posible crear un mapa de bits puro 888 o 565 en absoluto bajo javascript? ¿O qué tal un mapa de bits basado en paleta de 8 bits? Los juegos basados ​​en JS se beneficiarían enormemente solo teniendo que trabajar con píxeles de 8 bits desde mi punto de vista.

+0

Observe que mi pregunta es: "¿hay alguna manera de detectar el formato de píxel del navegador?" –

Respuesta

3

No. No hay forma aparente de degradar los píxeles del lienzo, ya que eso es lo que simplemente da el imageData en cuanto a la especificación en sí.

Puede, por supuesto, hacer un juego de javascript utilizando nada más que PNG de 8 bits, lo que ahorraría espacio y tiempo de carga, pero no de tiempo.

+0

Supongo que la pregunta podría reformularse: si ejecuto mi código en un navegador que solo admite gráficos de 16 bits (dispositivos móviles, aunque la mayoría soportan 32 actualmente), los datos de píxel estarán en formato 565 (palabra) o ¿Siempre estará en su formato actual RGB-A? –

+0

Creo que este último. –

2

No, no hay forma de especificar el espacio de color que desea. Cualquier corte manual alrededor de esto solo ralentizaría aún más el procesamiento. En mi experiencia, algunos navegadores (Google Chrome) pueden renderizar juegos muy complejos y aún así mantener una alta velocidad de cuadros.

0

Actualmente está mezclando dos entidades: el espacio de color de la imagen y el espacio de color de la superficie. 5-6-5 es un espacio de color de superficie que no tiene ningún concepto de transparencia por definición. La imagen y el <canvas> son sujetos de renderización de orden z, por lo que deben tener alfa en una forma u otra.

Así que la respuesta es 'no' porque va en contra de los requisitos.

+0

565 es simplemente el método de codificación, el "códec" si lo desea. Usé estos términos simplemente para subrayar el rango de bits y el medio de almacenamiento de cada píxel (que en este caso es una palabra de 16 bits). La decodificación de píxeles de 15/16 bit a RGB es muy simple. El punto era si podría haber un impulso de velocidad en los dispositivos móviles para ir detrás de los datos de píxeles en bruto de otra manera. Pero en realidad esperaba que el navegador decodificara los datos de píxeles en una matriz de valores RGB. En cuanto a la representación de orden Z, eso tiene que ver con el HLI y no con los tipos de datos. –

Cuestiones relacionadas