将 PDF 页面转换为 PNG 图像时崩溃

发布于 2024-11-01 07:00:08 字数 1031 浏览 1 评论 0原文

我需要将 PDF 文档的每一页转换为 PNG 图像。然后这些图像显示在滚动视图中。我需要在每页创建两个图像:一个在屏幕尺寸,另一个大 2.5 倍(当用户放大滚动视图时使用)。

我的问题是,当我创建大图像时,有时会出现内存警告和崩溃。 我的做法是众所周知的:


    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 的情况下限制内存消耗?

谢谢 !

I need to convert each page of a PDF document to PNG images. These images are then displayed in a scrollView. I need to create two images per page: one at the screen dimension, and one 2.5 times bigger (it is used when the user zoom in the scrollView).

My problem is that I have sometimes memory warnings and crashes when I create big images.
The way I do it is well-known:


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

The problem occurs on iPhone 3G/3GS and iPod Touch.
How can I limit the memory consumption while still having a zoom scale of 2.5 ?

Thanks !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一身软味 2024-11-08 07:00:08

您可以考虑使用网络视图来显示 PDF,它可以解决缩放和内存问题。基本上将矢量格式 PDF 渲染为大尺寸位图 PNG 可能不是最合适的设计决策。但如果不知道您对 PNG 的要求是什么,就很难发表评论。

You could consider using a webview to display the PDF, that takes care of the zooming and memory issues. Basically rendering the vector format PDF to a bitmap PNG at a large size is possibly not the most appropriate design decision. Without knowing what your requirements for the PNG are though, it's hard to comment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文