У меня есть файл 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);
}
Есть ли лучший способ рисовать это изображение, которое не занимает огромного объема памяти?