2011-12-12 27 views
7

我正在構建一個應用程序,您可以在該應用程序中製作圖片或從相機膠捲中選取圖像,並將這些內容保存在應用程序中以顯示在tableview和detailview中。 問題是,當我從應用程序內部創建圖片並保存圖片時,tableview和detailview變得非常慢,就好像應用程序處於凍結狀態。 我也得到這個錯誤「:CGAffineTransformInvert:奇異矩陣。」。當我從我的應用程序內部加載未從攝像機滾動的圖片時,沒有任何問題,應用程序運行非常糟糕。從相機和相機膠捲加載和保存圖像時出現問題。我究竟做錯了什麼?

這是當我打開相機和相機膠捲代碼:

-(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]; 
} 

這是我將它保存到相機膠捲,並把圖像中的ImageView:

-(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]; 

}

在這裏,我將圖像保存我的應用程序裏面:

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

}

我在做什麼錯?

回答

0

嘗試增加此委託法,看看是什麼錯誤:

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

坦克爲您的答覆,我添加了您的代碼,但似乎沒有真正的錯誤,因爲它只到達第一個NSLog。難道這可能是我記憶中的圖像太大了嗎? –

0

要保存試試這個在您的應用程序didFinishLaunchingWithOptions方法:

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

首先嚐試保存您的圖像點擊相機某處作爲NSData,然後以NSData形式訪問圖像,將其轉換爲UIImage並顯示在imageView上。

例如,你可以使用文件目錄下創建一個plist中,您可以將圖像保存爲NSData的在法 -

- (空)imagePickerController:(的UIImagePickerController *)選擇器didFinishPickingMediaWithInfo:(NSDictionary的*)信息{

}

保存圖像在你使用的方法 - - (IBAction爲)保存:(ID)發送{}

您可以從文件目錄中的plist訪問相同的圖像。將NSData轉換爲UIImage並將其顯示在imageView上。我確信沒有錯誤會繼續存在。

此錯誤「:CGAffineTransformInvert:奇異矩陣」。由於圖像的圖像方向屬性而發生。當將圖像保存爲NSData時存儲圖像屬性。並且您獲得的圖像沒有錯誤。

0

你需要實現的東西

-(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

您需要使用:

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

和實施:

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

爲Jensen2K說,如果沒有didFinishSavingWithError甚至被稱爲錯誤,因此您可以使用它來告知保存何時完成。

相關問題