首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何释放CGContextDrawPDFPage创建的内存

如何释放CGContextDrawPDFPage创建的内存
EN

Stack Overflow用户
提问于 2011-01-07 14:34:04
回答 1查看 2.8K关注 0票数 3

这是ipad杂志应用程序。我们需要阅读PDF和转换为缩略图PNG图像。在转换之前阅读PDF之后,调用了CGContextDrawPDFPage,内存迅速增加,直到崩溃才释放。我尝试了很多方法,但都不起作用。如果有人能帮上忙我真的很感激。

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

以下是完整的代码:

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

代码语言:javascript
复制
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;

}

EN

回答 1

Stack Overflow用户

发布于 2011-01-07 18:20:30

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4623086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档