CGContextDrawPDFPage nehmen große Mengen an Speicher
Ich habe eine PDF Datei, die ich zeichnen möchte, in outline form. Ich will zeichnen Sie die ersten mehreren Seiten auf das Dokument, jede auf Ihre eigene UIImage auf einer Taste, so dass, wenn geklickt wird, wird das Haupt-display navigieren Sie zu der angeklickten Seite.
Jedoch CGContextDrawPDFPage zu sein scheint, mit reichlich Speicher, wenn Sie versuchen zu zeichnen die Seite aus. Obwohl das Bild eigentlich nur um 100px hoch, stürzt die Anwendung beim zeichnen einer Seite in allem, was nach Instrumenten, vergibt etwa 13 MB Speicher nur für die eine Seite.
Hier ist der code für die Zeichnung:
//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);
}
Gibt es eine bessere Art und Weise zu zeichnen, dieses Bild, dass nicht riesige Mengen Speicher?
- Wie sind Sie zum aktualisieren der Ansicht nach dem dieser thread abgeschlossen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, hinzufügen :
bevor :
Ich hatte ein ähnliches Problem und das hinzufügen der 2 Funktionsaufruf oben führte, in der das rendering mit 5x weniger Speicher. Könnte ein bug in der CGContextXXX Zeichenfunktionen
Werfen Sie einen Blick auf meinen code für PDF image slicer auf github:
http://github.com/luciuskwok/Maps-Slicer
Es sollte genug Speicher auf dem Gerät, dass ein 13 MB Aufteilung ist nicht zu töten, die app. Sind Sie der Trockenlegung des autorelease-pool jedes mal, wenn Sie das Rendern einer PDF-Datei? Vielleicht wollen Sie auch cache-rendering in ein UIImage, so dass es nicht zu machen, es es ist jedes mal angezeigt.