我有一个 UIImageView,它允许用户放置和保存图像,直到可以保存为止。问题是,我不知道如何实际保存和检索我放置在 View 中的图像。
我已经像这样检索图像并将其放置在 UIImageView 中:
//Get Image
- (void) getPicture:(id)sender {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = (sender == myPic) ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentModalViewController:picker animated:YES];
[picker release];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage (UIImage *)image editingInfo:(NSDictionary *)editingInfo {
myPic.image = image;
[picker dismissModalViewControllerAnimated:YES];
}
它在我的 UIImageView 中显示选定的图像就好了,但我不知道如何保存它。我将 View 的所有其他部分(主要是 UITextfield)保存在 Core Data 中。我已经搜索和搜索,并尝试了人们建议的许多代码,但要么我没有正确输入代码,要么这些建议不适用于我设置代码的方式。很可能是前者。我想使用我用来将文本保存在 UITextFields 中的相同操作(保存按钮)将图像保存在 UIImageView 中。以下是我保存 UITextField 信息的方式:
// Handle Save Button
- (void)save {
// Get Info From UI
[self.referringObject setValue:self.myInfo.text forKey:@"myInfo"];
就像我之前说的,我已经尝试了几种方法来让它工作,但无法掌握它。我有生以来第一次想对一个无生命的物体造成 body 伤害,但我设法克制了自己。
我希望能够将用户放置到 UIImageView 中的图像保存在应用程序的文档文件夹中,然后能够检索它并将其放置在另一个 UIImageView 中,以便在用户将该 View 推送到堆栈时显示.非常感谢任何帮助!
最佳答案
一切都很好,伙计。不要伤害自己或他人。
您可能不想将这些图像存储在 Core Data 中,因为如果数据集变得太大,这会影响性能。最好将图像写入文件。
NSData *pngData = UIImagePNGRepresentation(image);
这会提取您捕获的图像的 PNG 数据。从这里,您可以将其写入文件:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name
[pngData writeToFile:filePath atomically:YES]; //Write the file
稍后阅读它的工作方式相同。像我们上面那样构建路径,然后:
NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:pngData];
您可能想要做的是创建一个为您创建路径字符串的方法,因为您不希望代码到处乱扔。它可能看起来像这样:
- (NSString *)documentsPathForFileName:(NSString *)name
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
return [documentsPath stringByAppendingPathComponent:name];
}
希望对您有所帮助。
https://stackoverflow.com/questions/6821517/