2010-10-11 245 views
0

我需要在UIImage的执行缩放操作和下面是相同的代码。导致内存泄漏。无法调试出现问题的地方。缩放图像

UIImage* ScaleImageWithWH(UIImage* image, CGRect aRect) 
{ 
    int kMaxResolution = 1800; 

    int x; 
    int y; 

    x = (image.size.width * aRect.origin.x)/aRect.size.width; 
    y = (image.size.height * aRect.origin.y)/aRect.size.height; 

    CGImageRef imgRef = CGImageCreateWithImageInRect (image.CGImage, CGRectMake (x,y,aRect.size.width,aRect.size.height)); 
    CGFloat width = CGImageGetWidth(imgRef); 
    CGFloat height = CGImageGetHeight(imgRef); 

    CGAffineTransform transform = CGAffineTransformIdentity; 

    CGRect bounds = CGRectMake(aRect.origin.x, aRect.origin.y, width, height); 

    bounds.size.width = aRect.size.width; 
    bounds.size.height = aRect.size.height; 

    CGFloat scaleRatio = bounds.size.width/width; 
    CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef)); 

    UIImageOrientation orient = image.imageOrientation; 

    switch(orient) 
    { 

     case UIImageOrientationUp: //default 
      transform = CGAffineTransformIdentity; 
      break; 

     default: 
      [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"]; 
    } 

    UIGraphicsBeginImageContext(bounds.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextScaleCTM(context, scaleRatio, -scaleRatio); 
    CGContextTranslateCTM(context, 0, -height); 

    CGContextConcatCTM(context, transform); 
    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef); 
    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return imageCopy; 
} 

请帮忙。

+1

哪里是内存泄漏,什么是警告释放CGImageRef和CGContextRef? – kubi 2010-10-11 15:41:59

回答

1

必须使用下面的代码

CGImageRelease(imgRef); 
CGContextRelease(context); 
+0

无需释放上下文 - 它在UIGraphicsEndImageContext()上发布。 – Anton 2010-11-09 23:03:59