0

这是我的代码,但它崩溃了......有什么想法吗?

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();

我在这里想念什么?基本上只是试图放大图像并将其裁剪为与原始大小相同。

谢谢

4

2 回答 2

1

问题是这一行:

CGImageRef imgRef = [tempImage CGImage];

或者更准确地说,直接跟进这一行:

[tempImage release];

你在这里得到一个 CF 对象,CGImageRef. Core Foundation 对象只有保留/释放内存管理,但没有自动释放对象。因此,当您释放UIImage第二行中的 时,CGImageRef也将被删除。这再次意味着当您尝试将其绘制到那里时它是未定义的。

我可以想到三个修复:

  • 使用 autorelease 来延迟图像的释放:[tempImage autorelease];
  • 将版本移动到方法的最底部
  • CFRetain使用和保留和释放图像CFRelease
于 2010-09-04T18:21:12.970 回答
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]];
于 2013-03-07T20:59:56.913 回答