2011-04-12 3 views
0

PDF 문서의 각 페이지를 PNG 이미지로 변환해야합니다. 이러한 이미지는 scrollView에 표시됩니다. 페이지 당 두 개의 이미지를 생성해야합니다. 하나는 화면 크기이고 다른 하나는 2.5 배입니다 (사용자가 scrollView를 확대 할 때 사용됩니다).PDF 페이지를 PNG 이미지로 변환 할 때 크래시가 발생합니다.

내 문제는 큰 이미지를 만들 때 메모리 경고 및 충돌이 발생한다는 것입니다. 나는 그것을 할 방법이 잘 알려져있다 :


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

문제는 아이폰 3G/3GS 및 아이팟 터치에서 발생합니다. 줌 배율을 2.5로 유지하면서 메모리 소비량을 어떻게 제한 할 수 있습니까?

감사합니다.

+0

왜 페이지에 대한 정적 이미지를 만들어야합니까? 더 높은 줌 배율에서 필요에 따라 PDF 페이지를 다시 렌더링하지 않는 이유는 무엇입니까? –

+1

위의 코드를 살펴보면 CropBox 페이지와 회전을 제대로 처리하지 못합니다. 자세한 내용은 여기를 참조하십시오 : http://ipdfdev.com/2011/03/23/display-a-pdf-page-on-the-iphone-and-ipad/. 메모리 문제와 관련하여 Letter 크기 페이지는 250 % 확대/축소 이미지로 변환되어 100 % 확대/축소 (96dpi)를 고려하면 2040x2640 픽셀의 이미지를 생성합니다. 32bpp (픽셀 당 4 바이트)에서 이미지는 약 20MB를 차지합니다. – iPDFdev

+0

@BradLarson PDF 페이지를 더 큰 스케일로 "실시간으로"렌더링하는 것은 오래되었습니다. @SorinNistor 링크를 제공해 주셔서 감사합니다. –

답변

0

확대/축소 및 메모리 문제를 해결하기 위해 webview를 사용하여 PDF를 표시 할 수 있습니다. 기본적으로 벡터 형식의 PDF를 비트 맵 PNG로 렌더링하면 크기가 가장 큰 디자인 결정이 아닐 수 있습니다. PNG에 대한 귀하의 요구 사항이 무엇인지 알지 못하면 언급하기가 어렵습니다.

+0

답변 해 주셔서 감사합니다. 이미 iPhone 3G 용 webview를 사용하고 있습니다. 그러나 iPhone 3GS 및 기타 새로운 장치의 경우 mu 자체 PDF 판독기를 사용하는 것이 더 좋습니다. PNG 이미지에 대한 특별한 요구 사항이 없습니다. 그들은 단지 아이폰 화면에 표시하는 데 사용됩니다. JPEG 로의 변환이 더 중요합니까? –

관련 문제