2

だから私は2枚の画像を取り、それらを組み合わせる機能を持っています。2つの小さい画像で試してみるとうまくいくので、画像が大きすぎるかもしれませんが、よくわかりません。そこで、カメラで写真を撮り、アルバムから開いてみます。画像を選択し、この関数を使用して別の画像と組み合わせます。

- (UIImage*)imageByCombiningImage:(UIImage*)firstImage withImage:(UIImage*)secondImage {

    UIImage *image = nil;

    float scale = 0.5f;

    CGSize newImageSize = CGSizeMake(MAX(firstImage.size.width, secondImage.size.width), MAX(firstImage.size.height, secondImage.size.height));

        NSLog(@"reached image by combining image");
    //crashes here when the image has been selected from an album (secondImage).
    // runs fine when the image has been taken from the camera. (secondImage). 

    if (UIGraphicsBeginImageContextWithOptions != NULL) {
        UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]);
    } else {
        UIGraphicsBeginImageContext(newImageSize); 
    }



    [firstImage drawAtPoint:CGPointMake(roundf((newImageSize.width-firstImage.size.width)/2), 
                                        roundf((newImageSize.height-firstImage.size.height)/2))]; 

    UIImage *scaledImage = 
    [UIImage imageWithCGImage:[secondImage CGImage] 
                        scale:scale orientation:UIImageOrientationUp];

    [scaledImage drawAtPoint:CGPointMake(roundf((100)), 
                                         roundf((100)))]; 
    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

私がこの行に到達したとき:

if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]);
} else {
    UIGraphicsBeginImageContext(newImageSize); 
}

静かにクラッシュします。メモリの問題かもしれないと思いますか?このメソッドも非同期的に呼び出されています。

4

3 に答える 3

2

マージ時のクラッシュを止める前に、画像のサイズを 3 に減らす必要がありました。大きすぎます。

于 2013-06-27T20:08:11.570 に答える
0

この情報だけではあなたの質問に対する解決策はありませんが、いくつかのことを確認することをお勧めします。

  1. あなたはメイン スレッドにいます。グラフィック プリミティブはそのスレッドからのみ呼び出す必要があり、非同期で呼び出されると言いました。この非同期スレッドがメインのスレッドかどうかを確認してください。
  2. 投稿する前に未使用のコードを削除してください: 実際に使用されていない最初の行に UIImageViews を作成しています。これは、アプリの時間/リソースの無駄であるだけでなく、SO でのデバッグとエラーの追跡を複雑にします。
于 2012-08-31T14:06:08.380 に答える