2

iPhoneの写真アプリに似たアプリに取り組んでいます。の流れは、 を通して画像を取得することUIImagePickerControllerです。実際の画像を使用し、さらにその画像をドキュメントに保存すると、アプリがハングします。プロファイル ツールで、割り当てが 19 ~ 20 MB になることを確認しました。その解決策があれば。

  1. UIImagepickerコントローラーから画像を取得する
  2. ドキュメントに保存します。

     -(NSString *)saveImageInDocumentsAtPath:(NSNumber *)number
    {
       NSString *fileName=[NSString stringWithFormat:@"image%@.png",number];
       NSString *imagePath= [[NSString alloc] initWithFormat:@"%@/%@",    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0],fileName];
       UIImage *image = self.selectedImage.image;
       NSData *imageData = UIImagePNGRepresentation(image);
       [imageData writeToFile:imagePath atomically:YES];
       return imagePath;
    }
    
4

2 に答える 2

1

私が間違っていなければ、典型的な画像は約3メガバイトになります(iPhoneとそのカメラによって異なります)。したがって、19から20に移行することは不合理ではありません。なぜあなたは19歳であるのか、別の質問になります。他の画像や大きなファイルなどが多すぎるかどうかを確認してください。

ImagePickerの代わりにAVFoundationを使用する場合は、画像を処理するための他のオプションがいくつかあります。

また、イメージをファイルシステムに非同期で書き込むことができます。

于 2013-03-06T07:08:42.863 に答える
1

これは、コードのエラー チェックを行う絶好の機会のようです。

これを試してみませんか?

-(NSString *)saveImageInDocumentsAtPath:(NSNumber *)number
{
    NSString *fileName=[NSString stringWithFormat:@"image%@.png",number];
    NSArray * docDirectoryArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    if(docDirectoryArray)
    {
        NSString *imagePath= [[NSString alloc] initWithFormat:@"%@/%@",    [docDirectoryArray objectAtIndex:0],fileName];
        UIImage *image = self.selectedImage.image;
        if(image)
        {
            NSData *imageData = UIImagePNGRepresentation(image);
            if(imageData)
            {
                BOOL success = [imageData writeToFile:imagePath atomically:YES];
                if(success)
                {
                    // only return the image path in the success == YES case
                    return imagePath;
                } else {
                    NSLog( @"did not save file to %@", imagePath);
                }
            } else {
                NSLog( @"could not get image data out of the image");
            }
        } else {
            NSLog( @"no image selected");
        }
    }
    // you might want to check in the caller to make certain the imagePath is NULL
    return NULL;
}
于 2013-03-06T07:13:07.570 に答える