iPhone - 翻转 UIImage
我正在开发一个使用 iPhone 前置摄像头的应用程序。 当使用该相机拍摄图像时,iPhone 会水平扭曲图像。 我想将其镜像回来,以便能够保存它并显示它,就像在 iPhone 屏幕上看到的那样。
我读了很多文档,在网上看了很多建议,但我仍然很困惑。
经过我的研究和多次尝试,我发现该解决方案适用于保存和显示:
- (UIImage *) flipImageLeftRight:(UIImage *)originalImage {
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:originalImage];
UIGraphicsBeginImageContext(tempImageView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform flipVertical = CGAffineTransformMake(
1, 0,
0, -1,
0, tempImageView.frame.size.height
);
CGContextConcatCTM(context, flipVertical);
[tempImageView.layer renderInContext:context];
UIImage *flipedImage = UIGraphicsGetImageFromCurrentImageContext();
flipedImage = [UIImage imageWithCGImage:flipedImage.CGImage scale:1.0 orientation:UIImageOrientationDown];
UIGraphicsEndImageContext();
[tempImageView release];
return flipedImage;
}
但这是一种盲目使用,我不明白做了什么。
我尝试使用 2 imageWithCGImage 对其进行镜像,然后将其旋转 180°,但这由于任何神秘的原因不起作用。
所以我的问题是:你能帮我编写一个有效的优化方法吗?我将能够理解它是如何工作的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果该矩阵太神秘了,则可能将其分为两个步骤使其更容易理解:
转换矩阵从第一到最后。最初,画布被向上移动,然后否定了图像的y坐标:
可以将坐标更改的两个公式组合成一个:
您制作的cgaffinetransformmake代表了这一点。基本上,对于
cgaffinetransformmake(a,b,c,c,d,e,f)
,它对应于see http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_affine/dq_affine.html for more info about核心图形中的2D仿射变换。
If that matrix is too mysterious, perhaps separating it into two steps make it easier to understand:
Transformation matrices are applied from first to last. Initially, the canvas is moved upward, and then the image's y-coordinates are all negated:
The two formulae that changes the coordinates can be combined into one:
The CGAffineTransformMake you have made represents this. Basically, for
CGAffineTransformMake(a,b,c,d,e,f)
, it corresponds toSee http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_affine/dq_affine.html for more info about 2D affine transform in Core Graphics.