Работа с очень большими изображениями в Core Graphics на iOS - PullRequest
1 голос
/ 04 декабря 2011

У меня очень большое представление (~ 8000x8000), из которого я хотел бы сделать снимок экрана, но мое приложение закрывается в 1/4 раза после выполнения кода снимка экрана.Код выглядит примерно так:

// Render the view into a bitmap
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(NULL, 
                                         _document.size.width, 
                                         _document.size.height, 
                                         8, 0, colorSpace, 
                                         kCGImageAlphaPremultipliedLast);

// Convert the UI space to CG space
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -_document.size.height);

// Render the view
[_contentView.layer renderInContext:ctx];
CGImageRef screenshot = CGBitmapContextCreateImage(ctx);

// Cleanup
CGContextRelease(ctx);    
CGColorSpaceRelease(colorSpace);

Очевидно, он будет использовать много памяти.У кого-нибудь есть какие-нибудь хитрости, работающие с очень большими изображениями и графикой?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Не рендеринг всего изображения сразу, рендеринг "полосы" 500x8000, запись, отпускание, повторение 16 раз.

0 голосов
/ 14 декабря 2011

Лучшее решение для этого - открыть контекст PDF и написать об этом. Таким образом, он использует файловую память, а не видеопамять!

http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/GeneratingPDF/GeneratingPDF.html

...