2012-04-18 112 views
0

这是一个奇怪的,但我认为我只是缺少一些简单的东西。UIGraphicsGetImageFromCurrentImageContext()保留原因崩溃

我有一个名为Theme的Objective C类。 主题从文件加载我的游戏的所有艺术品并将其存储在NSMutableArray中。

当应用程序启动它reates一个新的主题对象。加载过程 部分确实是这样的:

UIImage *image = [self mergeImage: bg toImage: overlay]; 
[imageArray addObject: image]; 

我拿的背景图像,并放置在它的上面覆盖,创建一个新的UIImage,通过使用此代码:

- (UIImage *)mergeImage:(UIImage *)image1 toImage:(UIImage *)image2 { 
UIGraphicsBeginImageContext(image1.size); 

[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)]; 

[image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)]; 

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
//[resultingImage retain]; 

UIGraphicsEndImageContext(); 

return resultingImage; 
} 

所有这发生在Theme的init函数中。 这里的问题,当我打电话[主题页头] INIT]从

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

的应用程序崩溃,一秒钟后,留下我的不具有堆栈或任何东西(我想,这螺丝了一些内存和崩溃后,当它再次使用它或某物)。

这是奇怪的部分。如果我不将新合并的图像添加到imageArray,它从不崩溃。我再也没有这个形象,但没有崩溃。另外,如果我不将图像添加到数组中,但我将它保留在mergeImage函数中,它会崩溃,这使我认为保留这个新制作的图像会导致问题。 Weirder仍然是,如果直到后来在应用程序中没有调用mergeImage,在[Theme init]和didFinishLaunchingWithOptions之外,它才是确定的。

任何想法,为什么?应用第一次启动时保留这张图片有什么问题?

+0

您的imageArray在您添加新图像时初始化了吗? – graver 2012-04-18 06:42:48

+0

你检查了结果图像不是零吗? – giorashc 2012-04-18 06:46:32

+0

你使用ARC吗? – nielsbot 2012-04-18 07:45:17

回答

0

试试这个下面的代码:

UIGraphicsBeginImageContext(drawImage.bounds.size); 
[drawImage.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return viewImage 

谢谢..!

+0

drawImage是什么类型的对象?我得到的错误,如果drawObject是一个UIImage * – Pedro 2012-04-18 21:47:23

+0

这是UIImageView对象 – Dinesh 2012-04-19 04:52:10

+0

它没有完全工作,但它让我失去了正确的道路,所以我将其标记为已回答。 我仍然不完全确定问题出在哪里,但是我发现如果我将图像与创建它的图像合并在一个不同的函数中,它就可以工作。所以我只做了2个函数,一个创建,一个合并,并从init中调用它们。 – Pedro 2012-04-19 17:45:47