使用CATransform3D旋转UIImage并仅获取裁剪的新UIImage

时间:2014-06-14 04:50:39

标签: ios objective-c uiimage gpuimage catransform3d

我正在尝试使用CATransform3DRotate方法围绕其X轴旋转UIImage,并获得旋转的UIImage,但旋转后,某些部分将被裁剪,而某些部分将被留下黑色(透明)。

我正在使用Brad Larson的GPUImage框架来执行此操作。

我的代码是

filter = [[GPUImageTransformFilter alloc] init];
CATransform3D perspectiveTransform = CATransform3DIdentity;
perspectiveTransform.m34 = 0.4;
perspectiveTransform.m33 = 0.4;
perspectiveTransform = CATransform3DRotate(perspectiveTransform, 0.75, 1.0, 0.0, 0.0);


[(GPUImageTransformFilter *)filter setTransform3D:perspectiveTransform];
GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:_myImage smoothlyScaleOutput:YES];
[sourcePicture addTarget:filter];
[filter useNextFrameForImageCapture];
[sourcePicture processImage];

_myImage = [filter imageFromCurrentFramebuffer];

有没有办法可以让新的UIImage适应新尺寸而不缩小尺寸?缩小比例可能会降低图片的质量。

顺便说一句,我试过在CALayer上做,但是虽然CALayer看起来是旋转的,但实际的UIImage仍然是相同的。

提前感谢大家!

1 个答案:

答案 0 :(得分:1)

如果您使用UIImageView来展示您的图片,那么您可以使用UIView的{​​{1}}属性来满足您的需求;请看一下this answer。或者,如果您需要自行旋转UIImage(不是图像视图),请查看this answer