【问题标题】:how to release memory created by CGContextDrawPDFPage如何释放 CGContextDrawPDFPage 创建的内存
【发布时间】:2011-01-07 06:34:03
【问题描述】:

这是 ipad 杂志应用程序。我们需要阅读 PDF 并转换为 PNG 图像以获取缩略图。转换前读取PDF后,调用CGContextDrawPDFPage,内存迅速增加,直到崩溃才释放。我尝试了很多方法,但它不起作用。如果有人可以提供帮助,我真的很感激。

CGContextDrawPDFPage(context, aPage); //这是内存杀手

以下为完整代码:

-(UIImage *)image :(CGPDFPageRef)aPage rect:(CGRect)aRect { CGRect pdfcropBox = CGRectIntegral(CGPDFPageGetBoxRect(aPage, kCGPDFCropBox));

if ((float)pdfcropBox.size.width/(float)pdfcropBox.size.height > 
    (float)aRect.size.width/(float)aRect.size.height) //pdf width too big
{
    aRect.size.height = aRect.size.width * pdfcropBox.size.height / pdfcropBox.size.width;
}
//CGRect pdfcropBox = aRect;    

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,aRect.size.width,
                                             aRect.size.height,
                                             8,
                                             (int)aRect.size.width * 4,
                                             colorSpace, 
                                             kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGColorSpaceRelease(colorSpace);
colorSpace = nil;

CGPDFPageRetain(aPage);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(aPage,
                                                              kCGPDFCropBox,
                                                              CGRectMake(0, 0, aRect.size.width,aRect.size.height),
                                                              0, true);
CGContextSaveGState(context);
CGContextConcatCTM(context, pdfTransform);
CGContextDrawPDFPage(context, aPage);
CGPDFPageRelease (aPage);
aPage = nil;
CGContextRestoreGState(context);    
CGImageRef image = CGBitmapContextCreateImage(context);
UIImage *resultingImage =  [UIImage imageWithCGImage:image];
CGContextClearRect(context, aRect);
CGContextClearRect(context, pdfcropBox);

CGContextRelease(context);
CGImageRelease(image);
context = nil; 

NSLog(@"colorSpace :%d,aPage :%d,context :%d",[colorSpace retainCount],[aPage retainCount],[context retainCount]);
return resultingImage;

}

【问题讨论】:

    标签: iphone


    【解决方案1】:

    您需要按照此处Fast and Lean PDF Viewer for iPhone / iPad / iOs - tips and hints? 的说明释放并重新打开 CGPDFDocument

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 2011-01-31
      相关资源
      最近更新 更多