这是我的代码,但它正在崩溃......任何想法?
UIImage *tempImage = [[UIImage alloc] initWithData:imageData];
CGImageRef imgRef = [tempImage CGImage];
[tempImage release];
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);
CGRect bounds = CGRectMake(0, 0, width, height);
CGSize size = bounds.size;
CGAffineTransform transform = CGAffineTransformMakeScale(4.0, 4.0);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextConcatCTM(context, transform);
CGContextDrawImage(context, bounds, imgRef);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我在这里缺少什么?基本上只是尝试缩放图像并将其裁剪为与原始图像相同的尺寸。
由于
答案 0 :(得分:1)
问题在于这一行:
CGImageRef imgRef = [tempImage CGImage];
或者更确切地说,这条线的直接跟进:
[tempImage release];
您在这里获得了一个CF对象CGImageRef
。 Core Foundation对象仅具有保留/释放内存管理,但没有自动释放的对象。因此,当您在第二行中释放UIImage
时,CGImageRef
也将被删除。这再次意味着当你试图将它绘制在那里时它是未定义的。
我可以想到三个修复:
[tempImage autorelease];
CFRetain
和CFRelease
保留并发布图片。答案 1 :(得分:0)
试试这个:
-(CGImageRef)imageCapture
{
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect rect= CGRectMake(0,0 ,320, 480);
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect);
return imageRef;
}
每当您想要捕捉屏幕时,请使用以下行
UIImage *captureImg=[[UIImage alloc] initWithCGImage:[self imageCapture]];