Est-il possible de créer un objet UIImage à partir d'une surface hors écran sans copier les données de pixel sous-jacentes?Partage de mémoire entre CGImageRef et UIImage
Je voudrais faire quelque chose comme ceci:
// 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);
La mémoire est libérée et égalise à la taille acceptable, mais la pointe de la mémoire de 30MB est ce qui tue l'application. Est-il possible de partager les données de pixels?
Je l'ai considéré sauver la mémoire tampon hors écran dans un fichier et charger les données à nouveau, mais c'est un hack et les méthodes pratiques pour l'iPhone ont besoin d'un UIImage pour le sauver ...
UIImage: initWithData prend un paramètre NSData *, je ne l'ai pas vu un moyen d'obtenir NSData * de CGImageRef ou CGContextRef. – Shawn
NSData est fourni avec des formats d'image tels que JPEG et PNG, que vous pouvez utiliser via initWithData. Dans le cas contraire, vous obtenez des blocs NSData * sur un UIImage avec des appels PNGRepresentation et JPGRepresentation. Donc, ça ne t'aiderait pas. –