2011-12-12 31 views
7

Tôi đang xây dựng một ứng dụng mà bạn có thể tạo ảnh hoặc chọn hình ảnh từ thư viện ảnh và lưu các ảnh này bên trong ứng dụng để hiển thị trong chế độ xem bảng và xem chi tiết. Vấn đề là khi tôi thực hiện một hình ảnh từ bên trong ứng dụng và lưu nó, các tableview và detailview nhận được terribly chậm như thể các ứng dụng được đóng băng. Tôi cũng nhận được lỗi này ": CGAffineTransformInvert: ma trận số ít". Khi tôi tải một hình ảnh từ máy ảnh-rol mà không được lấy từ bên trong ứng dụng của tôi, không có vấn đề gì và ứng dụng chạy rất nham hiểm.Sự cố khi tải và lưu hình ảnh từ máy ảnh và thư viện ảnh. Tôi đang làm gì sai?

Đây là mã cho khi tôi mở máy ảnh và máy ảnh cuộn:

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{ 
if (buttonIndex == actionSheet.cancelButtonIndex) { 
    return; 
} 

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 
picker.allowsEditing = NO; 

switch (buttonIndex) { 
    case 0: 
     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
      picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     } 
     break; 
    case 1: 
     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) { 
      picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
     } 
     break; 
} 

[self presentModalViewController:picker animated:YES]; 
} 

Đây là nơi tôi lưu nó vào thư viện ảnh và đưa hình ảnh trong một IMAGExem:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 
UIImage *mijnImage; 
if (CFStringCompare((__bridge_retained CFStringRef)mediaType, kUTTypeImage, 0)==kCFCompareEqualTo) { 
    mijnImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage]; 
    mijnPlaatje_.image = mijnImage; 
    UIImageWriteToSavedPhotosAlbum(mijnImage, nil, nil, nil); 

} 

[picker dismissModalViewControllerAnimated:YES]; 

}

Và ở đây tôi lưu các hình ảnh bên trong ứng dụng của tôi:

-(IBAction)save:(id)sender{ 
drankjes.plaatje = [mijnPlaatje_ image]; 
[self dismissModalViewControllerAnimated:YES]; 

}

Tôi đang làm gì sai?

Trả lời

0

Hãy thử thêm này đại biểu-phương pháp để xem những gì lỗi là:

- (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo { 
    NSLog(@"Saving image"); 
    if(error != nil) { 
     NSLog(@"Error saving: %@",[error localizedDescription]); 
    } 
} 
+0

xe tăng cho thư trả lời của bạn và tôi đã thêm mã của bạn nhưng có vẻ như không có lỗi thực vì nó chỉ đạt NSLog đầu tiên. Có thể nào là trường hợp hình ảnh tôi đang tiết kiệm quá lớn về mặt bộ nhớ? –

0

Để lưu thử điều này trong phương pháp didFinishLaunchingWithOptions ứng dụng của bạn:

NSString *path = [[NSBundle mainBundle]pathForResource:@"" ofType:@""]; 
UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo), nil); 
0

Trước hết thử lưu hình ảnh của bạn nhấp từ camera ở đâu đó dưới dạng NSData và sau đó truy cập hình ảnh ở dạng NSData, chuyển đổi nó thành UIImage và hiển thị trên imageView.

Ví dụ, bạn có thể sử dụng thư mục tài liệu để tạo ra một plist nơi bạn có thể lưu hình ảnh như NSData trong phương pháp -

- (void) imagePickerController: (UIImagePickerController *) chọn didFinishPickingMediaWithInfo: (NSDictionary *) thông tin {

}

Và khi tiết kiệm hình ảnh trong phương pháp bạn sử dụng - - (IBAction) tiết kiệm: (id) sender {}

bạn có thể truy cập cùng một hình ảnh từ plist trong thư mục Tài liệu. Chuyển đổi NSData thành UIImage và hiển thị nó trên imageView.I chắc chắn không có lỗi nào tồn tại sau đó.

Lỗi này ": CGAffineTransformInvert: ma trận số ít". xảy ra do thuộc tính định hướng hình ảnh của hình ảnh. Khi lưu hình ảnh khi NSData lưu trữ thuộc tính hình ảnh. Và bạn sẽ nhận được hình ảnh không có lỗi.

0

Bạn cần phải thực hiện một cái gì đó

-(IBAction) pickphoto 
{ 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) 
    { 
     UIImagePickerController *picker= [[UIImagePickerController alloc]init]; 
     picker.delegate = self; 
     picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     [yourView presentModalViewController:picker animated:YES]; 
     picker.videoQuality = UIImagePickerControllerQualityTypeHigh; 
     picker.allowsEditing = NO; 
     [picker release]; 
    } 
} 


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage : (UIImage *)image editingInfo:(NSDictionary *)editingInfo 
{ 
    [picker dismissModalViewControllerAnimated:YES]; 
    myImage.image=image; 
} 
1

Bạn cần phải sử dụng:

UIImageWriteToSavedPhotosAlbum(image, self, @selector(video:didFinishSavingWithError:contextInfo), nil) 

và thực hiện:

- (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo { 
    NSLog(@"Saving image"); 
    if(error != nil) { 
     NSLog(@"Error saving: %@",[error localizedDescription]); 
    } 
} 

như Jensen2K nói, didFinishSavingWithError được gọi là thậm chí nếu không có lỗi để bạn có thể sử dụng nó để biết thời điểm lưu xong.

Các vấn đề liên quan