我正在尝试创建一个方法,可以沿着X轴、Y轴或同时沿着两个轴翻转UIImage。我已经接近成功,但我的变换知识不够好以致于无法完全实现。这是我目前的代码:
- (UIImage *)flippedImageByAxis:(MVImageFlip)axis{
UIGraphicsBeginImageContext(self.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform verticalFlip = CGAffineTransformMake(1, 0, 0, -1, 0, self.size.height);
CGAffineTransform horizFlip = CGAffineTransformMake(-1.0, 0.0, 0.0, 1.0, self.size.width, 0.0);
if(axis == MVImageFlipXAxis || axis == MVImageFlipXAxisAndYAxis)
CGContextConcatCTM(context, horizFlip);
if(axis == MVImageFlipYAxis || axis == MVImageFlipXAxisAndYAxis)
CGContextConcatCTM(context, verticalFlip);
CGContextDrawImage(context, CGRectMake(0.0, 0.0, self.size.width, self.size.height), [self CGImage]);
UIImage *flipedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return flipedImage;
}
这个操作可以翻转图像,但并不完全正确。Y轴翻转的图像根本没有被翻转,X轴翻转的图像看起来像XY图像应该看起来的样子,而XY图像则像Y轴图像应该看起来的样子。将这些变换组合起来并使它们正常工作让我感到头疼。
MVImageFlip枚举只是代码中看到的三种情况,没有什么特别之处。
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale);
- Jakub Truhlář