Я создаю NSImage из беззнакового char * 24-битных данных RGB, например:
NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:(unsigned char **)&data
pixelsWide:gWidth
pixelsHigh:gHeight
bitsPerSample:8
samplesPerPixel:3
hasAlpha:NO
isPlanar:NO
colorSpaceName:NSCalibratedRGBColorSpace
bytesPerRow:gWidth*3
bitsPerPixel:24];
NSImage *img = [[NSImage alloc] initWithSize:NSMakeSize(gWidth, gHeight)];
[img addRepresentation:bitmap];
Проблема, с которой я сталкиваюсь, заключается в том, что позже я пишу больше вещей в «данные», и я знаю, что NSImage не делает их копию. Я говорю это потому, что если позже я запишу все 0 в свой буфер данных, то изображение станет полностью черным.
Я борюсь с Objective C, так что терпите меня, если это тривиально.
Если я сделаю локальную копию «данных» и никогда не освобожу ее, тогда все будет работать хорошо, но, очевидно, произойдет утечка:
unsigned char *copy_of_data = new unsigned char[len];
memcpy(copy_of_data, data, len);
Как я могу:
(1) заставить initWithBitmapDataPlanes создать свою собственную копию и обработать освобождение?
или (2) самостоятельно освобождать данные, когда это необходимо, после того, как изображение больше не нуждается в них?