【发布时间】:2013-01-10 15:42:45
【问题描述】:
我目前正在使用我在online tutorial 上找到的代码让 iPhone 用户从他们的相机胶卷中选择一张图片。将图像设置为UIImageView 工作正常,但随后我尝试在图像上调用一个函数(每次移动滑块时)。事实证明操作系统没有保留图像,所以当我尝试访问它(或我创建的缓存变量)时,它不起作用(因为地址被设置为0x0000000)。
如果UIImage 符合NSCopying,这很简单。但是,事实并非如此。那么,如何复制图像以使操作系统不会删除它呢?
可能的重复
- How do I make an exact copy of a UIImage returned from a UIImagePickerController?
- Making deep copy of UIImage
编辑: 滑块在更改时调用此函数:
- (IBAction)samplingSliderChanged:(id)sender {
NSLog(@"%@", self.imageStay);
float sample = self.samplingSlider.value * 0.6 + 0.2;
self.samplingRateText.text = [NSString stringWithFormat:@"%.0f%%", sample*100];
//self.imageView.image = [self.brain sampleImage:self.imageStay atRate:sample];
self.imageView.image = [self.brain sampleImage:self.imageStay.copy atRate:sample];
NSLog(@"self.imageStay: %@, self.imageStay.copy: %@", self.imageStay, self.imageStay.copy);
}
第一次移动滑块时,我的self.imageStay(缓存变量)的地址为0x0000。
我的显示相机胶卷功能如下:
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = info[UIImagePickerControllerMediaType];
UIImage * image;
[self dismissViewControllerAnimated:YES completion:nil];
image = info[UIImagePickerControllerOriginalImage];
image = [self imageWithImage:image scaledToSize:CGSizeMake(256, 256)];
self.imageView.image = image;
if (_newMedia)
UIImageWriteToSavedPhotosAlbum(image,
self,
@selector(image:finishedSavingWithError:contextInfo:),
nil);
self.imageView.image = image;
self.imageStay = image
}
这里的缓存变量和image的内存地址是一样的,我猜这个后面会被删除。
【问题讨论】:
-
我不确定您是否需要复制图像。如果您将它放在图像视图中,它将保留图像,所以我不确定这就是您的问题。你可能想展示一些代码。
-
编辑显示一些代码。
-
真的吗?我没有看到任何代码。
-
尝试刷新。我在进行编辑之前发表了评论。
-
你是如何声明 imageStay 的?