Gibt es eine Möglichkeit, ein Bild so zu zeichnen, dass es 4 statt 3 Punkte verwendet (Perspektivverzerrung)?
Frage
Das Zeichnen eines Parallelgramms wird mit Graphics.DrawImage gut unterstützt:
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);
Wie machen Sie 4 Punkte (das Folgende wird natürlich nicht unterstützt, ist aber gewollt):
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);
}
Lösung
Das Nächste, was ich finden kann, ist diese Information, was extrem verzögert ist.
Andere Tipps
Normalerweise würden Sie dies mit einer 3x3-Matrix tun, aber mit der Matrix-Klasse können Sie nur 6 statt 9 Werte angeben.Möglicherweise können Sie dies in Direct X tun.
Wenn man darüber nachdenkt, wie 3D-Tools damit umgehen würden ...Versuchen Sie, ein Dreieck aus einer Hälfte und dann das andere Dreieck für die andere Hälfte zu zeichnen.Wenn Sie also die Punkte A, B, C und D haben;Sie würden (mit einer Schnittebene) A, B, C und dann B, C, D oder etwas in der Art zeichnen.
Ich habe den folgenden Artikel in CodeProject gefunden:Kostenlose Bildtransformation von YLS
braucht einige Arbeiten
vielleicht kannst du das nutzen :)