es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma más efectiva de transformar coordenadas?

Tengo una imagen en lienzo en la que quiero hacer una distorsión trapezoidal. El código en sí está listo, pero es lento, muy lento. Las imágenes de 400×400 tardan ~10-20 segundos en una máquina de escritorio i7. Sin embargo, quiero ejecutar esto en un dispositivo móvil con resolución máxima de la cámara, así que estoy buscando una forma más eficiente.
Actualmente, mi código funciona de la siguiente manera:
1. Solicito al usuario las coordenadas del rectángulo de distorsión. Necesito obtener las coordenadas de los vértices del cuadrilátero del usuario.
2. Divido los lados a y c en 400 partes.
3. Itero sobre la división anterior, tomando el punto en la parte 1/400 del lado “a” y el punto en la parte 1/400 del lado “c”. Luego, tomo la sección entre los puntos en la parte 2/400. Y así sucesivamente.
4. Divido la sección que acabo de generar en 400 y también itero sobre ella.
5. Tomo el número de línea producido en el punto 2 como “X” y los puntos en el punto 4 como “Y”. Las coordenadas de los puntos dados son Q y W.
6. Tomo el píxel en el lienzo original en las coordenadas “Q” y “W” y lo dibujo en el lienzo objetivo en la ubicación identificada por las coordenadas “X” y “Y”.

¿Existe una forma más eficiente de hacer esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, existen formas más eficientes de lograr la distorsión trapezoidal en una imagen de lienzo. Un método es utilizando WebGL, que permite aceleración por hardware y un procesamiento más rápido. Otro enfoque es precomputar las coordenadas distorsionadas y almacenarlas en un arreglo, luego usar ese arreglo para dibujar la imagen distorsionada directamente en el lienzo sin tener que calcular las coordenadas cada vez. Además, reducir el número de divisiones y secciones también podría mejorar el rendimiento. Experimentar con diferentes enfoques y optimizar el código puede ayudar a lograr resultados más rápidos tanto en equipos de escritorio como en dispositivos móviles.

Comments are closed.