iPhone 사진 라이브러리에서 이미지를 가져온 후 iPhone 문서 디렉토리간에 UIImage를 저장하고로드하려고합니다. 그렇게 할 수는 있지만 어떤 이유로 이미지를로드 할 때 시계 반대 방향으로 90도 회전합니다.iPhone/Xcode : UIImage 및 UIImageView는 프로그램과 함께 제공되지 않습니다.
이미지 저장 : 여기 내 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에서 사진을 선택하면 이미지를 보여줍니다). 그리고 AFTER를 표시하는 오른쪽에 하나 저장로드가 발생합니다. 오른쪽에있는 것은 90도 CCW를 회전시키는 유일한 것입니다. 비 저장/불러 오기 그림이 올바르게 표시됩니다. 이것은 실제 iPhone에서만 발생합니다. 시뮬레이터는 두 이미지를 올바르게 보여줍니다. 나는 많은 시간을 알아 내려고 노력했지만 많은 도움을주지 못했습니다. 이 문제의 원인은 무엇입니까?
편집 : 분명히 그렇지 않은 경우에도 항상 이미지의 방향이 바뀌 었다고 알려야합니다. 모든 코드가 실행 된 후에 만 회전합니다. 나는 내 코드 사이에 물건을 바꿀 수 있는지 확인하기 위해 강제로 다시 그리기를 시도했지만, 그렇지 않다. (가능하다해도 나는 그 일을 잘못하고있다.) 더 이상 알지 못한다. 또한 iPhone에서 캡쳐 한 사진을 자동 회전하지 않습니다. 카메라가 찍은 사진 만. [나는 다운로드 한 사진을 시도하지 않았습니다.] 가장 이상한 것입니다 ...
그리고 정확히 어떻게 사진을 찍고 있는지 궁금하다면, 여기에 내가 뭘하고 있는지를 밝혀 줄 방법이 있습니다. (이것은 분명,이 기능을 수행하는 데 필요한 모든 방법은 아니지만, 나는 내 코드를 작성한 방법에 대한 통찰력을 제공합니다) 일 :
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
theimageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[self saveImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"]];
[picker dismissModalViewControllerAnimated:YES];
}
어떤 조언을하는 것은 대단히 감사합니다. 그리고 나는이 점을 많이 알고 있습니다. 어리석은, 결코 들어 본 적이없는 문제를 일으킬 수있는 방법이 있다면 기회를 찾았을 것입니다 : P
관련없는 장소에서
: 당신이 반환 (그래서 라인이 실행되지 않습니다) 후 해제하기 때문에 여기에 데이터를 유출하고 있습니다. 유지 호출 (alloc, retain 또는 new)을 사용하여 생성 한 경우 반환 전에 자동 갱신해야합니다. –그래도 내가 풀어도 여전히 그걸로 데이터를 읽을 수 있습니까? 나는 그것을 몰랐다. 나는 그것을 바꿀 것이다. 감사! –
autorelease는 AutoreleasePool이 풀을 소모 할 때 보내도록 요청합니다. 출시 한 제품의 데이터는 읽지 않아야합니다. 언제든지 자동으로 리트리브 한 것들의 데이터를 읽습니다. –