【发布时间】:2011-08-03 21:43:14
【问题描述】:
我需要将 PDF 文档的每一页都转换为 PNG 图像。然后这些图像显示在滚动视图中。我需要为每页创建两张图片:一张在屏幕尺寸,一张大 2.5 倍(在用户放大 scrollView 时使用)。
我的问题是我在创建大图像时有时会出现内存警告和崩溃。 我的做法众所周知:
CGRect pageRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
float pdfScale = 2.5*self.view.frame.size.height/pageRect.size.height;
pageRect.size = CGSizeMake(pageRect.size.width*pdfScale, pageRect.size.height*pdfScale);
UIGraphicsBeginImageContext(pageRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,pageRect);
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, pageRect.size.height);
CGContextScaleCTM(context, pdfScale,-pdfScale);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
问题出现在 iPhone 3G/3GS 和 iPod Touch 上。 如何在缩放比例为 2.5 的同时限制内存消耗?
谢谢!
【问题讨论】:
-
为什么需要为页面创建静态图像?为什么不在更高的缩放比例下根据需要重新渲染 PDF 页面?
-
观察上面的代码,它没有正确处理页面裁剪框和旋转。请在此处查看更多详细信息:ipdfdev.com/2011/03/23/…。关于内存问题,一个字母大小的页面转换为 250% 缩放的图像,考虑到 100% 缩放的 96dpi 生成一个 2040x2640 像素的图像。在 32bpp(每像素 4 字节)时,图像大约需要 20MB。
-
@BradLarson 以更高的比例“实时”呈现 PDF 页面太长了。 @SorinNistor 感谢您的链接。
标签: iphone image ios pdf uiscrollview