Pregunta

Introducción

Actualmente estoy desarrollando una pequeña aplicación de dibujo similar a Mugtug's Bloc de dibujo. Sin embargo, hay un problema bastante molesto que aún no he logrado.

Algoritmo de dibujo

Mi algoritmo de dibujo básico es similar al utilizado por Mugtug. Básicamente, solo sella imágenes usando DrawImage mientras el usuario se dibuja. Hay una discapacidad grave. El algoritmo comienza a fallar con bajo alfa.

Puede ver esto fácilmente en la herramienta de Mugtug estableciendo la configuración del cepillo de la siguiente manera: Diámetro -> 100, Dureza -> 1, Flujo -> 100, Opacidad -> 2 (¡1 es demasiado pequeño! Bug en la aplicación?).

Hay dos problemas principales: 1. bandas visibles. 2. Cambios de color (da diferentes colores para ver cómo funciona esto ...)

Preguntas

¿Podría el problema tener algo que ver con la precisión del color? Me parece que la API de lona trata los colores usando canales de 8 bits (es decir, 0-255). ¿Hay alguna forma de evitar esta limitación? Preferiría usar colores flotantes puros (0.0-1.0) en su lugar si es posible.

Cualquier idea sobre cómo lidiar con esto es bienvenida. Si el color se limita a los canales de 8 bits, supongo que no tengo suerte ...

¿Fue útil?

Solución

Este problema parece completamente debido a la precisión del color. Creo que la mayoría de las implementaciones de API de lona utilizan canales RGBA de 8 bits. 1% o 2% de opacidad significa que está aplicando una cantidad muy pequeña de color a la imagen, solo alrededor de 2-5 niveles de diferencia, por lo que incluso después de muchas aplicaciones repetidas del pincel, cualquier color que use terminará siendo cuantificado hasta un número menor.

Puede hacer el suyo un lienzo de punto flotante y copiarlo en un lienzo normal después de cada cambio. Eso hará que el problema sea completamente imperdible para la mayoría de las operaciones. Tendría que implementar sus propias operaciones de dibujo (no está tan mal si solo usa drawImage) y es probable que sean más lentos que los de lienzo.

Otros consejos

¿Ves problemas similares en el panel de bocetos de Mugtug? Probé con un pincel azul alfa al 4% sobre un fondo naranja, y hay bandas y demás. Si es mejor que su código, entonces está haciendo algo mal.

Siempre he visto lienzos trabajando con gráficos de 32 bits (24 para color + 8 para alfa), así que dudo que esto se pueda resolver.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top