Возможно, вы захотите взглянуть на это, так как это может решить часть вашей проблемы или направить вас в правильном направлении: http://www.codeproject.com/KB/graphics/YLScsFreeTransform.aspx
Оно возьмет изображение и исказит его, используя 4Координаты X / Y вы предоставляете.
Быстрый, бесплатный, простой код.Проверено и работает прекрасно.Просто скачайте код по ссылке, а затем используйте FreeTransform.cs следующим образом:
using (System.Drawing.Bitmap sourceImg = new System.Drawing.Bitmap(@"c:\image.jpg"))
{
YLScsDrawing.Imaging.Filters.FreeTransform filter = new YLScsDrawing.Imaging.Filters.FreeTransform();
filter.Bitmap = sourceImg;
// assign FourCorners (the four X/Y coords) of the new perspective shape
filter.FourCorners = new System.Drawing.PointF[] { new System.Drawing.PointF(0, 0), new System.Drawing.PointF(300, 50), new System.Drawing.PointF(300, 411), new System.Drawing.PointF(0, 461)};
filter.IsBilinearInterpolation = true; // optional for higher quality
using (System.Drawing.Bitmap perspectiveImg = filter.Bitmap)
{
// perspectiveImg contains your completed image. save the image or do whatever.
}
}
К вашему сведению, я считаю, что .NET имеет ограничение на объем памяти объекта в 2 ГБ, поэтому если вы работаете с действительно большими изображениямиВы можете столкнуться с ошибкой памяти.