Hallo.
Für jegliche Art der Hilfestellung werde ich dankbar.
Mein NSView zeichnet in drawRect über CGContextRef mehrere importierte PDFs (Grafik) die mit einer CGImageRef mittels CGContextClipToMask maskiert werden.
Es funktioniert.
Es ist mir aber wichtig den Inhalt des Views in PDF-Format (Vector Qualität) zu vergrößern und als Bitmap zu exportieren.
Dies funktioniert jedoch bis dato nur bedingt, obwohl die Bilddatei nach meiner Vorstellung mehrfach skaliert gesichert wird, werde ich bei dem Export mit 11 Memory Leaks Positionen überschüttet.
Im Vorbereitung zum Bildexport erzeuge ich eine NSBitmapImageRep in der mittels NSGraphicsContext eine NSPDFImageRep von der View gezeichnet wird. Nach Instruments liegt genau da das Problem.
Alles anzeigen
Getestet habe ich es auch mit ähnlichen Methoden in der CGContextDrawPDFPage(imageCGContext, page) im NSGraphicsContext angewendet worden sind, leider mit exakt gleichen Ergebnis: Export ok Leaks 11 .
Es scheint arge Probleme zu geben, mit dem Aufzeichnen der NSPDFImageRep in die NSBitmapImageRep. Wie konnte man Dies umgehen?
Setze ich nur die importierte PDFs in die View gibt's keine Leaks beim Export. Das gleiche wenn sich in der View nur die CGImageRef als Maske CGContextClipToMask befindet.
Für jegliche Hilfestellung werde ich dankbar.
Projekt läuft mit ARC. Xcode Version 5.1.1. MacBook OSX 10.8.5
Rein Experimentell habe ich die View direkt mit
als pdf exportiert, um zu sehen was passiert im Instruments, wenn ich die Datei von daher mit Vorschau.app als vergrößerte Bitmap exportiere.
Habe dann im Instruments die Vorschau.app aufgerufen um das besagte Bild zu exportieren, und siehe da : Die Liste von memory Lears war plötzlich voll.
Was ist hier los, dachte ich mit Erstaunen und angespornt mit der "Entdeckung" untersuchte ich noch andere mac-eigene apps.
- Vorschau.app ganze Menge Leaks schon beim Offnen.
- iTunes.app Leaks.
- App Store.app Leaks.
- iPhoto.app Leaks.
- Page.app Leaks.
Mache ich da wirklich was falsch oder nimmt es mac bei eigenen apps mit der leaks nicht so genau.
Mich hat es etwas, gelinge gesagt überrascht.
Für jegliche Art der Hilfestellung werde ich dankbar.
Mein NSView zeichnet in drawRect über CGContextRef mehrere importierte PDFs (Grafik) die mit einer CGImageRef mittels CGContextClipToMask maskiert werden.
Es funktioniert.
Es ist mir aber wichtig den Inhalt des Views in PDF-Format (Vector Qualität) zu vergrößern und als Bitmap zu exportieren.
Dies funktioniert jedoch bis dato nur bedingt, obwohl die Bilddatei nach meiner Vorstellung mehrfach skaliert gesichert wird, werde ich bei dem Export mit 11 Memory Leaks Positionen überschüttet.
Im Vorbereitung zum Bildexport erzeuge ich eine NSBitmapImageRep in der mittels NSGraphicsContext eine NSPDFImageRep von der View gezeichnet wird. Nach Instruments liegt genau da das Problem.
Quellcode
- - (NSBitmapImageRep*) NSBitmapImageRepFromViewPDFdataWithDrawInRectWithScale:(CGFloat)scale_ fromView:(NSView *)view_
- {
- NSRect rect_ = [view_ bounds];
- float i_width = rect_.size.width;
- float i_height = rect_.size.height;
- NSData * data = [view_ dataWithPDFInsideRect:rect_];
- NSPDFImageRep * imgPDFRep = [NSPDFImageRep imageRepWithData:data];
- NSBitmapImageRep * bmpImageRep = [[NSBitmapImageRep alloc]
- initWithBitmapDataPlanes:NULL
- pixelsWide:i_width * scale_
- pixelsHigh:i_height * scale_
- bitsPerSample:8
- samplesPerPixel:4
- hasAlpha:YES
- isPlanar:NO
- colorSpaceName:NSCalibratedRGBColorSpace
- bitmapFormat:NSAlphaFirstBitmapFormat
- bytesPerRow:4 * (i_width * scale_)
- bitsPerPixel:32
- ];
- [bmpImageRep setSize:NSMakeSize(i_width, i_height)];
- [NSGraphicsContext saveGraphicsState];
- [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithBitmapImageRep:bmpImageRep]];
- [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
- NSRect drawRect = NSMakeRect(0.0, 0.0, i_width, i_height);
- [imgPDFRep drawInRect:drawRect]; // MEMORY LEAK
- [NSGraphicsContext restoreGraphicsState];
- return bmpImageRep;
- }
Getestet habe ich es auch mit ähnlichen Methoden in der CGContextDrawPDFPage(imageCGContext, page) im NSGraphicsContext angewendet worden sind, leider mit exakt gleichen Ergebnis: Export ok Leaks 11 .
Es scheint arge Probleme zu geben, mit dem Aufzeichnen der NSPDFImageRep in die NSBitmapImageRep. Wie konnte man Dies umgehen?
Setze ich nur die importierte PDFs in die View gibt's keine Leaks beim Export. Das gleiche wenn sich in der View nur die CGImageRef als Maske CGContextClipToMask befindet.
Für jegliche Hilfestellung werde ich dankbar.
Projekt läuft mit ARC. Xcode Version 5.1.1. MacBook OSX 10.8.5
Rein Experimentell habe ich die View direkt mit
als pdf exportiert, um zu sehen was passiert im Instruments, wenn ich die Datei von daher mit Vorschau.app als vergrößerte Bitmap exportiere.
Habe dann im Instruments die Vorschau.app aufgerufen um das besagte Bild zu exportieren, und siehe da : Die Liste von memory Lears war plötzlich voll.
Was ist hier los, dachte ich mit Erstaunen und angespornt mit der "Entdeckung" untersuchte ich noch andere mac-eigene apps.
- Vorschau.app ganze Menge Leaks schon beim Offnen.
- iTunes.app Leaks.
- App Store.app Leaks.
- iPhoto.app Leaks.
- Page.app Leaks.
Mache ich da wirklich was falsch oder nimmt es mac bei eigenen apps mit der leaks nicht so genau.
Mich hat es etwas, gelinge gesagt überrascht.