1

我有一个使用相机拍照的应用程序。我正在制作类似于名人自拍的东西。使用前置摄像头,用户可以根据叠加照片进行调整并拍照。

问题是前置摄像头图像被镜像。所以现在图像与覆盖图像不在同一个位置。

用户单击捕获按钮后,有没有办法镜像图像?

4

1 回答 1

1

是的,您可以在用户单击捕获按钮后立即镜像图像。诀窍是知道什么时候该做,什么时候不该做。或者知道你是否真的应该翻转你的叠加层。我想你会想要翻转你的叠加层而不是图像。但这部分是你要弄清楚的逻辑。这是我将如何翻转图像:

- (void)imageTaken:(NSNotification*)notification
{
    UIImage *image = [[notification userInfo] objectForKey:UIImagePickerControllerOriginalImage];
    // determine if image needs to be flipped.  Maybe based on the size which tells you which camera was used.  Or maybe using the EXIF data.  That wasn't your question though so..
    bool imageNeedsFlipped = ... whatever your logic is
    if (imageNeedsFlipped) image = [self flipImageHorizontally:image];
    // then do your thing with your image..
}

- (UIImage *) flipImageHorizontally:(UIImage *)originalImage
{
    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:originalImage];
    UIGraphicsBeginImageContext(tempImageView.frame.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGAffineTransform flipHorizontal = CGAffineTransformMake(-1.0, 0.0, 0.0, 1.0, tempImageView.frame.size.height, 0.0);
    CGContextConcatCTM(context, flipHorizontal);

    [tempImageView.layer renderInContext:context];

    UIImage *flippedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return flippedImage;
}

但正如我在评论中所说。从控制器获取图像时,图像不会翻转。只有当您在屏幕上看到自己并且使用前置摄像头时,它才会翻转。做这个测试..打开相机并切换到前置相机..举起你的左手。屏幕像镜子一样显示你。屏幕左侧的手是举起的那只手。现在拍张照片,在图书馆里看看。右边的手现在是举起来的那只。保存照片时不会翻转现实。当它向您预览时,它正在翻转现实。

所以我真的认为你以错误的方式接近它。覆盖是需要翻转的,但只有在他们使用前置摄像头时才需要翻转。但这取决于您以及您希望应用程序如何工作。

于 2014-05-10T04:10:50.470 回答