2010-12-07 12 views
6

Bien, esto está relacionado con mi pregunta anterior sobre el ColorMatrixColorFilter, pero creo que es una pregunta significativamente diferente. Me pregunto si hay una manera, o mejor dicho, cómo extender la clase ColorFilter para crear mi propio filtro de color personalizado. Para lo que necesito lograr, necesito escribir un filtro personalizado que consulte cada píxel, convertir su valor RGB en HSL o LAB, modificar el tono, convertirlo a RGB y establecer ese píxel en el nuevo valor.Creando una subclase personalizada de ColorFilter?

Estoy pensando que podría simplemente escribir una clase que hace esto, teniendo en cuenta un Drawable y una cantidad de cambio de tono para realizar, pero tendría que ser llamado manualmente para cada Drawable, y cada estado de cada Drawable, mientras que el ColorFilter parece manejar esto muy bien. Dada la existencia de LightingColorFilter y ColorMatrixColorFilter, parece que se puede subclasificar, pero hasta ahora mis esfuerzos por encontrar cualquier tipo de documentación han sido inútiles. Parece que no puedo encontrar el código fuente para ninguno de los tres (Lighting, ColorMatrix, ColorFilter); Estoy pensando que probablemente estén hechos en código nativo.

Mi pregunta es esta: ¿Cómo puedo correctamente subclase ColorFilter? Si no puedo encontrar una buena respuesta para eso, si alguien puede encontrar la fuente (he buscado el git de Android) y publicar un enlace a eso, eso sería útil también.

Gracias!

+0

¿Finalmente pudo escribir su propio ColorFilter? ¿Cómo? – Prizoff

Respuesta

0

Como dijo, el source code muestra que ColorFilter usa el código nativo, por lo que no puede realmente crear una subclase.

Probablemente no haya otra manera que crear su propia clase para lo que quiere hacer.

+0

¿No podría escribir mi propio filtro de color nativo? Además, en cuanto a crear mi propia clase para eso, ¿crees que Java sea lo suficientemente rápido, o sería algo que debería intentar escribir a través del NDK? – kcoppock

+0

Sí, debería crear su clase con la ayuda del NDK, es un uso típico debido a la enorme diferencia de rendimiento. Pero mi consejo es escribir primero tu clase en Java porque es más fácil de depurar, especialmente si no estás familiarizado con el NDK. – Dalmas

+2

Los 150 puntos me inspiraron a ver el NDK yo mismo ... parece que hay una muestra bitmap_plasma que es más o menos exactamente lo que necesita adaptar. Si está en Windows necesita instalar Cygwin para ejecutar el compilador GCC y otras herramientas, pero se ve razonablemente sencillo. –

Cuestiones relacionadas