2014-01-31 62 views
2

需要创建一个函数,该函数在给定四个点的情况下裁剪图像。通过指定四个角点(非矩形)来裁剪图像

输入:---------->图像,四个角点

输出:------->裁剪图像

我所遇到两种类型的裁剪功能到目前为止,

1)使用的一个点,身高&宽度

2),其使用一个点,高度,宽度&的角度 然而这些功能似乎没有完全解决我的问题。

为了更清楚起见,我试图在下图中描述我的意图。 Cropping an image, by specifying corner points

+0

请出示你试过代码,并有... –

+0

公共静态位图CropRotatedRect问题(位图源,矩形RECT,浮动角度,布尔高品质) { 位图的结果=新位图(rect.Width,RECT。高度);使用(Graphics g = Graphics.FromImage(result)) g.InterpolationMode = HighQuality? InterpolationMode.HighQualityBicubic:InterpolationMode.Default; (矩阵mat =新矩阵()) { mat.Translate(-rect.Location.X,-rect.Location.Y); mat.RotateAt(angle,rect.Location); g.Transform = mat; gDrawImage(source,new Point(0,0)); } } 返回结果; } – VAR

+0

我已经使用了上面的代码,但是当输入区域是梯形时,函数似乎不起作用。 如果有一个函数需要4点作为输入,然后处理它,这将是所有输入区域类型的解决方案。至少,这就是我的感受 – VAR

回答

2

终于找到了解决我的问题:)

// define quadrilateral's corners 
List<IntPoint> corners = new List<IntPoint>(); 
corners.Add(new IntPoint( x1, y1)); 
corners.Add(new IntPoint(x2, y2)); 
corners.Add(new IntPoint(x3, y3)); 
corners.Add(new IntPoint(x4, y4)); 
// create filter 
QuadrilateralTransformation filter=new QuadrilateralTransformationBilinear(corners, NewWidth, NewHeight); 
// apply the filter 
Bitmap newImage = filter.Apply(image); 

这将任何四边形转变为矩形之一。 它帮助了我,希望这些信息对其他人也有帮助。