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 回答
0

我也有同样的崩溃,完全正确!

UIGraphicsBeginImageContextWithOptions 崩溃

好的, UIGraphicsBeginImageContextWithOptions 是一个红鲱鱼。……

看来问题是 xxx 没有被释放。

于 2013-06-26T16:05:19.480 回答