Есть ли способ создать объект UIImage со стороны экрана без копирования базовых данных пикселей?Обмен памятью между CGImageRef и UIImage
Я хотел бы сделать что-то вроде этого:
// These numbers are made up obviously...
CGContextRef offscreenContext = MyCreateBitmapContext(width, height);
// Draw into the offscreen buffer
// Draw commands not relevant...
// Convert offscreen into CGImage
// This consumes ~15MB
CGImageRef offscreenContextImage = CGBitmapContextCreateImage(offscreenContext);
// This allocates another ~15MB
// Is there any way to share the bits from the
// CGImageRef instead of copying the data???
UIImage * newImage = [[UIImage alloc] initWithCGImage:offscreenContextImage];
// Releases the original 15MB, but the spike of 30MB total kills the app.
CGImageRelease(offscreenContextImage);
CGContextRelease(offscreenContext);
памяти освобождается и нивелирует на приемлемых размерах, но шип памяти 30MB является то, что убивает приложение. Есть ли способ поделиться данными с пикселями?
Я считал сохранение закадрового буфера в файл и снова загрузки данных, но это хак и удобные методы для iPhone требует UIImage, чтобы сохранить его ...
UIImage: initWithData принимает NSData * параметр, я не видел способ получить NSData * из CGImageRef или CGContextRef. – Shawn
NSData поставляется с форматами изображений, такими как JPEG и PNG, с которыми вы взаимодействуете через initWithData - идя в другую сторону, вы получаете блоки NSData * из UIImage с вызовами PNGRepresentation и JPGRepresentation. Таким образом, это не поможет вам. –