我在Mac OS X,10.6
工作如何设置任何图像的图像透视图?
我不想使用CoreImage。
是否可以通过NSAffineTransforms进行。
此致 Dhana。
答案 0 :(得分:1)
对于不使用CoreImage的解决方案,您需要自己实现转换。它不能作为仿射变换来完成。 This paper解释了这个过程非常好。
如果您无法自己编写代码,可以查看实现透视变换的其他第三方库。一个这样的选择是ImageMagick。它们提供透视转换作为命令行实用程序,它们还有一个可用于在您自己的程序中获得相同功能的C API。
答案 1 :(得分:0)
您无法通过仿射变换表达透视变换。但是,在CoreImage中,您可以使用ImageUnit(CoreImage的名称,通常称为“过滤器”)对图像(以及许多其他很酷的东西)进行透视变换。
请参阅CIPerspectiveTransform并查看CoreImage开发人员指南中的section about CoreImage Filters。这应该让你去。
基本上你做的是......
perspectiveTransform = [CIFilter filterWithName:@"CIPerspectiveTransform"];
[perspectiveTransform setDefaults];
[perspectiveTransform setValue: myCIImage forKey: @"inputImage"];
[perspectiveTransform setValue: myToLeft forKey: @"inputTopLeft"];
// ... also set inputTopRight, inputBottomLeft and inputBottomRight
// if you have the coordinates of the corner points you can create
// CIVector instances with
// + (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y
// ...
result = [perspectiveTransform valueForKey: @"outputImage"];
答案 2 :(得分:0)
处理图像透视的另一种方法是使用Core Animation应用带透视的三维变换。您可以将图像放在CALayer中(作为该图层的内容),或者将NSImageView分层。我将介绍如何创建透视CATransform3D并将其应用于this answer中的图层,但关键是要将CATransform3D的m34元素设置为负分数,以便创建透视效果。 Mike Lee有一篇关于here的文章,还有一些sample code。