2

UIImagePickerControllerイメージを使用してディスクに保存すると、パフォーマンスに大きな問題が発生しました。何が間違っているのかわかりません。これが私のコードです:

- (void)imagePickerController:(UIImagePickerController *)pick 

didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
    iPixAppDelegate *delegate = (iPixAppDelegate *)[[UIApplication sharedApplication] delegate];
    [delegate addPicture:imageData];    
}

このaddPictureメソッドは、次のように初期化される新しい画像オブジェクトを作成します。

- (Picture*) initPicture:(NSData*)dat inFolder:(NSString*)pat {
    self.data = dat;
    NSDate *d = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-mm-dd hh-mm-ss"];
    self.name = [[formatter stringFromDate:d] stringByAppendingString:@".png"]; //The name by default of a picture is the date it has been taken
    [formatter release];
    self.path = [pat stringByAppendingPathComponent:self.name];
    if(![self fileExistsAtPath:self.path]){
        [self.data writeToFile:self.path atomically:YES];
    }
    return self;
}

UIImagePickerController非常に高速ですが、画像をディスクに保存するとプログラムが非常に遅くなります。

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

3

同様の問題がありました。私がそれを回避した方法は、ピッカーからの画像を別のスレッドで処理することでした。私の問題は、ピッカーを閉じて画像を処理しようとすると、アプリ/UIを処理するメインスレッドがクラッシュすることでした。

- (void)imagePickerController:(UIImagePickerController *)picker
    didFinishPickingImage:(UIImage *)image
              editingInfo:(NSDictionary *)editingInfo
{
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];

    NSLog(@"picker did finish");
    [NSThread detachNewThreadSelector:@selector(useImage:) toTarget:self withObject:image];

}
于 2010-01-15T15:49:06.563 に答える
1

あなたの問題は、元の画像を撮ったことが原因である可能性があります。

カメラからの元の画像の解像度は約 1200x1400 です。これは大量のメモリであり、それから画像を作成しようとするとデバイスがクラッシュします (メモリが不足します)。

画像のサイズを小さくすることをお勧めします (ネイティブの 320x480)。

于 2010-01-15T14:31:39.793 に答える