CGContextDrawPDFPage, поднимающий большие объемы памяти

У меня есть файл PDF, который я хочу потянуть в форме схемы. Я хочу потянуть первые несколько страниц на документе каждый в их собственном UIImage для использования на кнопке так, чтобы при нажатии основной дисплей перешел к нажатой странице.

Однако CGContextDrawPDFPage, кажется, использует обильные объемы памяти при попытке потянуть страницу. Даже при том, что изображение, как только предполагается, приблизительно 100 пкс высотой, сбои приложения при рисовании одной страницы, в частности, которая согласно Инструментам, выделяет приблизительно 13 МБ памяти только для одной страницы.

Вот код для рисования:

//Note: This is always called in a background thread, but the autorelease pool is setup elsewhere
+ (void) drawPage:(CGPDFPageRef)m_page inRect:(CGRect)rect inContext:(CGContextRef) g { 
    CGPDFBox box = kCGPDFMediaBox;
    CGAffineTransform t = CGPDFPageGetDrawingTransform(m_page, box, rect, 0,YES);
    CGRect pageRect = CGPDFPageGetBoxRect(m_page, box);

    //Start the drawing
    CGContextSaveGState(g);

    //Clip to our bounding box
    CGContextClipToRect(g, pageRect);   

    //Now we have to flip the origin to top-left instead of bottom left
    //First: flip y-axix
    CGContextScaleCTM(g, 1, -1);
    //Second: move origin
    CGContextTranslateCTM(g, 0, -rect.size.height);

    //Now apply the transform to draw the page within the rect
    CGContextConcatCTM(g, t);

    //Finally, draw the page
    //The important bit.  Commenting out the following line "fixes" the crashing issue.
    CGContextDrawPDFPage(g, m_page);

    CGContextRestoreGState(g);
}

Существует ли лучший способ нарисовать это изображение, которое не поднимает огромные объемы памяти?

9
задан Ed Marty 4 June 2010 в 14:57
поделиться

1 ответ

Посмотрите мой код для слайсера изображений PDF на github:

http://github.com/luciuskwok/Maps-Slicer

На устройстве должно быть достаточно памяти, чтобы выделение 13 МБ не убило приложение. Вы опустошаете пул автовыделения каждый раз при рендеринге PDF? Возможно, вы также захотите кэшировать рендеринг в UIImage, чтобы не приходилось рендерить его при каждом отображении.

0
ответ дан 4 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: