Я пытаюсь сохранить и загрузить UIImage в каталог документов iPhone и из него после того, как изображение выбрано из библиотеки фотографий iPhone. Это можно сделать, но по какой-то причине, когда я загружаю изображение, оно поворачивает его на 90 градусов против часовой стрелки. Вот мои методы saveImage и loadImage:
Сохранить изображение:
- (void)saveImage: (UIImage*)image{
if (image != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithString: @"lePhoto.png"] ];
//NSData* data = UIImagePNGRepresentation(image);
//[data writeToFile:path atomically:YES];
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
}
}
Загрузить изображение:
- (NSData*)loadImage{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithString: @"lePhoto.png"] ];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
//UIImage *image = [[UIImage alloc] initWithData:data]; //my second try
//UIImage* image = [UIImage imageWithContentsOfFile:path]; //first try
//return image;
return data;
[data release];
}
И сейчас я загружаю изображение вот так, чтобы посмотреть, решит ли оно по какой-то безумной причине мою проблему (очевидно, это не так):
UIImage* theImage = [[UIImage alloc] initWithData:[self loadImage]];
Я провел некоторое тестирование, когда у меня есть два UIImageViews рядом, один слева, который не сохраняет и не загружает изображение перед отображением (он просто показывает вверх изображение, как только фотография выбрана из ImagePicker) и тот, который справа, который отображает ПОСЛЕ сохранения сохранения. Единственный справа - единственный, вращающийся на 90 градусов против часовой стрелки; изображение без сохранения / загрузки отображается правильно. Это происходит только на реальном iPhone. Симулятор показывает оба изображения правильно. Я потратил много-много часов, пытаясь понять это, но безрезультатно. Любые идеи относительно того, что может быть причиной этого?
РЕДАКТИРОВАТЬ: Следует также знать, что изображение всегда говорит, что оно ориентировано вверх, даже если это явно не так! Он вращается только после запуска ВСЕГО кода. Я попытался сделать принудительную перерисовку между моим кодом, чтобы увидеть, если это что-то меняет, но это не так (хотя возможно, что я даже делаю это неправильно. Кто знает, больше).
Кроме того, он не будет автоматически делать фотографии, снятые с iPhone. Только фотографии, которые были сделаны камерой. [Я не пробовал загруженные фотографии.] Это самая странная вещь ...
И если вам интересно, как именно я перетаскиваю свою фотографию, вот метод, который, по крайней мере, проливает свет на то, что я делаю (очевидно, не каждый метод необходим для выполнения этой функции, но он дает понимание о том, как я написал свой код):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
theimageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[self saveImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"]];
[picker dismissModalViewControllerAnimated:YES];
}
Любой совет очень ценится. И я знаю это очень много: если есть способ сделать что-то сумасшедшее, чтобы получить какую-то глупую, никогда ранее не слышанную проблему, скорее всего, я найду это, очевидно: P