¿Hay alguna manera de dibujar una imagen para usar 4 puntos en lugar de 3 (deformación de perspectiva)?
Pregunta
Dibujar un paralelogramo es muy compatible con Graphics.DrawImage:
Bitmap destImage = new Bitmap(srcImage.Width, srcImage.Height);
using (Graphics gr = new Graphics.FromImage(destImage))
{
Point[] destPts = new Point[] { new PointF(x1, y1),
new PointF(x2, y2), new PointF(x4, y4)};
gr.DrawImage(srcImage, destPts);
¿Cómo se hacen 4 puntos (obviamente lo siguiente no es compatible, pero esto es lo que se quiere):
Bitmap destImage = new Bitmap(srcImage.Width, srcImage.Height);
using (Graphics gr = new Graphics.FromImage(destImage))
{
Point[] destPts = new Point[] { new PointF(x1, y1), new PointF(x2, y2),
new PointF(x3, y3), new PointF(x4, y4)};
gr.DrawImage(srcImage, destPts);
}
Solución
Lo más cercano que puedo encontrar es esta informacion, que es extremadamente lento.
Otros consejos
Normalmente harías esto con una Matrix de 3x3, pero la clase Matrix solo te permite especificar 6 valores en lugar de 9.Es posible que puedas hacer esto en Direct X.
Al pensar en cómo lo manejarían las herramientas 3D...intenta dibujar un triángulo de una mitad y luego el otro triángulo para la otra mitad.Entonces, si tienes los puntos A, B, C y D;dibujarías (con un plano de recorte) A, B, C y luego B, C, D, o algo por el estilo.
Encontré el siguiente artículo en CodeProject:Transformación de imagen gratuita por YLS
necesita algunas obras
tal vez puedas usar esto :)