透视图像转换与平铺

时间:2011-04-20 12:25:44

标签: c# image transform perspective

寻找一个好的图像处理库,可以用于我计划创建的新应用程序。我将使用C#.NET(VS 2008)

我的应用程序需要执行以下操作:

  1. 启动时加载图像并将其显示在图片框中
  2. 然后,我应该能够在图片框中的任何位置选择四个点(TopLeft,TopRight,BottomLeft,BottomRight)。
  3. 然后,我需要使用4个源点和目标点将源图像转换为正确的透视图。
  4. 不仅如此,我还需要最终输出图像具有指定的大小。我希望应用程序能够使用相同的透视图并返回指定的矩形大小(不是4点的大小)的图像。我希望你明白我的意思。需要平铺和转换源图像以生成完全适合指定区域的输出。

    我尝试了一些像Aforge.NET,ImageMagick,EMGU等的库。有些库很慢。有些只能生成小尺寸的透视图像。有些会给出内存错误。找不到合适的解决方案。

2 个答案:

答案 0 :(得分:3)

我认为my question over here的答案对你的情况也有帮助。

答案 1 :(得分:1)

您可能需要查看此内容,因为它可能会解决您问题的一部分,或引导您朝着正确的方向前进: 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有2GB的对象内存限制,因此如果您使用的是非常大的图像,则可能会遇到内存错误。