【问题标题】:How to get a copy of the image from UIImagePicker如何从 UIImagePicker 获取图像的副本
【发布时间】:2009-11-22 22:39:08
【问题描述】:

我有一个非常简单的应用程序,用户在其中选择UIImageView 并按下按钮用相机拍照。然后将图像返回并显示在UIImageView中。

但是,由于UIImageViews 共享同一个代表,当UIImageViews 之一中已经有图像,并且我去拍照放置在另一个中时,之前的UIImageView 被替换为空内容(即没有图像)。我想这是因为他们共享同一个代表。有什么方法可以复制图像而不是引用它的委托版本?

这里有一些示例代码:

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
[picker.parentViewController dismissModalViewControllerAnimated:YES];

if (topView == YES)
{
    NSLog(@"topView = %i", topView);
    imageView.image = image;
}
else {
    NSLog(@"topView = %i", topView);
    imageView2.image = image;
}

}

谢谢!

编辑:这是按下按钮时 IBAction 调用的代码

- (IBAction) pushPick {
    topView = YES;
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}
- (IBAction) pushPick2 {
    topView = NO;
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}

【问题讨论】:

    标签: iphone xcode delegates uiimageview uiimagepickercontroller


    【解决方案1】:

    类似这样的:

    UIImage * newImage = [UIImage imageWithCGImage:[image CGImage]];
    

    【讨论】:

    • 谢谢,我确定这是对的,但我的应用程序仍然运行不正常。我有两个按钮可以启动 imagepicker,每个 UIImageView 一个按钮。我发现如果我按下第一个按钮并选择一个图像,然后第二个按钮并选择一个图像一切都很好,但是之后按下另一个按钮会将该图像分配给 UIView,但会清除另一个 UIView。有什么想法吗?
    • 很难说,我会尝试将NSLog(@"topView = %i", topView); 放在依赖该变量的代码区域周围。
    • 似乎产生了正确的结果。也许有更好的方法将多个 UIImageViews 绑定到 UIImagePickers?顺便说一句,如果我选择不同的 UIImagePickerSourceType(例如 UIImagePickerControllerSourceTypePhotoLibrary),一切似乎都正常
    • 我已经编辑了上面的信息。这个方法我没怎么改,我觉得只是日志语句变了。谢谢!
    • 相机选择器可能使用共享 UIImage 来存储捕获的图像。在这两种情况下都尝试使用imageView.image = [UIImage imageWithCGImage:[image CGImage]];
    【解决方案2】:

    使用

    [image copy];
    

    但请记住,您需要在 dealloc 上释放对象

    【讨论】:

    • UIImage 不符合 NSCopying,所以我不会向它发送“复制”消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多