0

我正在使用 UIImagePickerController 的简单实现来拍照并将其保存到我的应用程序目录中。我遇到了 didFinishPickingMediaWithInfo 的问题,我从信息中检索图像,使用 UIImageJPEGRepresentation 将其转换为 NSData,然后将其保存到文件中。问题是,NSData 对象似乎永远不会被覆盖,所以我第一次拍照它可以很好地保存图片,但不会保存任何后续图片,因为当我重新显示位于要保存到的 filePath 的图像时,它始终是我拍摄的第一张图片。

我现在有 NSLog 语句打印出 UIImage 和我保存图像的 NSData 对象的哈希值。UIImage 哈希每次都会改变,但 NSData 哈希始终是完全相同的……那不应该也改变吗?

我的代码如下。请注意,下面委托方法中未声明的所有内容都是全局变量,不会给我带来任何麻烦(至少它们似乎没有)。

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentsDirectory = [paths objectAtIndex:0];          
    filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileNameString];

    NSData *imageData = UIImageJPEGRepresentation(image, 0.5f);
    //    imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.5f)];

    [imageData writeToFile:filePath atomically:YES];

    [self dismissModalViewControllerAnimated:YES];
}

当我完全摆脱 NSData 对象并替换所有实例时

imageData

UIImageJPEGRepresentation(image, 0.5f)

我仍然有同样的问题,即 UIImageJPEGRepresentation(image, 0.5f) 的哈希总是相同的,即使它作为参数的 UIImage 的哈希总是改变。

4

1 回答 1

0

尝试这个:

 NSData *imageData = UIImageJPEGRepresentation(image, 0.5f);
 imageData = [NSKeyedArchiver archivedDataWithRootObject:imageData];
//imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.5f)];

NSError *error= nil;
[imageData writeToFile:filePath options:NSDataWritingAtomic error:&error];

也看看这个链接

你在创建目录吗?使用此代码创建目录:

NSArray* dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                        NSUserDomainMask, YES);
NSString* docsDir = [dirPaths objectAtIndex:0];

pathString = [docsDir stringByAppendingPathComponent:@"%@",filePath];

NSFileManager* filemgr = [NSFileManager defaultManager];

//Creates  Directory
if ([filemgr createDirectoryAtPath:pathString
       withIntermediateDirectories:YES 
                        attributes:nil 
                             error: NULL] == YES){
于 2012-08-28T01:52:41.603 回答