2011-12-12 4 views
7

私はあなたが絵を作るか、またはカメラロールから画像を選択し、テーブルビューとdetailviewに表示するアプリ内でこれらを保存することが可能なアプリを構築しています。 問題は、私はアプリの中から画像を作成し、それを保存するときにアプリが凍結されているかのように、テーブルビューとdetailviewがひどく遅くなるということです。 私もこのエラーを受け取ります: "CGAffineTransformInvert:特異行列"。私のアプリの中から撮られなかったカメラロールから画像をロードすると、問題はなく、アプリは非常にうまく動作します。カメラとカメラロールから画像を読み込んで保存する際の問題。私は間違って何をしていますか?

これは私がカメラとカメラロール開いたときのためのコードです:私はカメラロールに保存し、ImageViewの中にイメージを置く場所

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

これは、次のとおりです。

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

}

私が間違って何をしているのですか?

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

答えて

0

てみてくださいすべての

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

あなたの返事のためのタンクと私はあなたのコードを追加しましたが、それは最初のNSLogにしか届かないので、実際のエラーはないようです。私が保存している画像が記憶の点で大きすぎる場合がありますか? –

0

アプリケーションdidFinishLaunchingWithOptions方法でこれを試す保存するには:エラーが何であるかを表示するには、このデリゲートメソッドを追加すること

0

まず、あなたのイメージからクリックし保存してくださいカメラをNSDataとしてどこかに配置し、NSData形式で画像にアクセスし、UIImageで変換してimageViewに表示します。あなたはこの方法でのNSDataとして画像を保存することができたplistを作成するドキュメントディレクトリを使用することができる。例えば

-

- (無効)imagePickerController:(UIImagePickerController *)ピッカーdidFinishPickingMediaWithInfo:(NSDictionaryの*)の情報{

- - あなたが使用した方法で画像を保存

}

(IBAction)セーブ:(ID)、送信者{}

あなたはUIImageとしてドキュメントdirectory.Convert中のplistのNSDataから同じ画像にアクセスし、imageView.Iに表示することができますが、エラーがその後、生き残っていないと確信しています。

このエラー ":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は何があっても呼ばれていませんエラーが発生したため、保存が完了したときに通知することができます。

関連する問題