2010-03-12 1 views
2

У меня есть UIImagePickerController, который сохраняет изображение на диск как png. Когда я пытаюсь загрузить PNG и установить в файл файл U12mageView imageView.image, он не отображается.UIImagePickerController Сохранить на диск, затем загрузить в UIImageView

Вот мой код:

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

    // Create a file name for the image 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    NSString *imageName = [NSString stringWithFormat:@"photo-%@.png", 
          [dateFormatter stringFromDate:[NSDate date]]]; 
    [dateFormatter release]; 

    // Find the path to the documents directory 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    // Now we get the full path to the file 
    NSString *fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName]; 

    // Write out the data. 
    [imageData writeToFile:fullPathToFile atomically:NO]; 

    // Set the managedObject's imageLocation attribute and save the managed object context 
    [self.managedObject setValue:fullPathToFile forKey:@"imageLocation"]; 
    NSError *error = nil; 
    [[self.managedObject managedObjectContext] save:&error]; 


    [self dismissModalViewControllerAnimated:YES]; 
} 

Тогда вот как я пытаюсь загрузить его:

self.imageView.backgroundColor = [UIColor lightGrayColor]; 
self.imageView.frame = CGRectMake(10, 10, 72, 72); 
if ([self.managedObject valueForKey:@"imageLocation"] != nil) { 
    NSLog(@"Trying to load the imageView with: %@", [self.managedObject valueForKey:@"imageLocation"]); 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:[self.managedObject valueForKey:@"imageLocation"]]; 
    self.imageView.image = image; 

} else { 
    self.imageView.image = [UIImage imageNamed:@"no_picture_taken.png"]; 
} 

Я получаю сообщение, что он пытается загрузить ImageView в отладчике, но изображение никогда не отображается в изображении. Может ли кто-нибудь сказать мне, что я здесь не так?

Спасибо, кучка.

+0

попробуйте не сохранять полный путь, просто имя изображения и посмотреть путь перед отображением. – RunLoop

ответ

7

Вы пишете объект NSData, а не изображение. Вам нужно прочитать объект NSData и преобразовать его в UIImage.

Предполагая, что все остальное правильно, попробуйте следующее:

NSData *data = [[NSData alloc] initWithContentsOfFile:[self.managedObject valueForKey:@"imageLocation"]]; 
UIImage *image = [[UIImage alloc] initWithData:data]; 
1

Использование NSDateFormatterShortStyle причинит дата будет отображаться как (например) 12/11/12, который испортит ваше имя файла. Он также будет использовать двоеточие в коротком представлении времени, что является незаконным.

Я бы рекомендовал использовать более пользовательский формат дату, такие как:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setLocale:locale]; 
[dateFormatter setDateFormat:@"yyyyMMdd-HHmmss"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
0

Я использовал этот код на одном из моих тестовых проектов и смоделировал ошибку. Джордан был прав насчет того, чтобы перенести его в NSData, прежде чем снова изменить его на UIImage, но настоящая проблема здесь заключается в методе именования файлов.

Я заметил, что вы использовали текущую дату и время в качестве имени файла для своего изображения. Сюда входят такие символы, как «:» и «/», которые не могут использоваться для имен файлов. http://www.portfoliofaq.com/pfaq/FAQ00352.htm

В качестве решения, я сделал формат дату, как то, что написано ниже:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyyMddHHmm"]; NSString *imageName = [NSString stringWithFormat:@"photo-%@.png", [dateFormatter stringFromDate:[NSDate date]]];

Надеется, что это помогает другим, а также. :)

 Смежные вопросы

  • Нет связанных вопросов^_^