jestem tworzenia NSImage z unsigned char * danych 24bit RGB tak:zarządzanie pamięcią Cocoa podczas korzystania initWithBitmapDataPlanes stworzyć NSImage
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];
Problem mam jest to, że ja później pisanie więcej rzeczy do "danych" i wiem, że NSImage nie robi ich kopii. Mówię to, ponieważ jeśli później piszę wszystkie 0 do mojego bufora danych, to obraz stanie się czarny.
Walczę z Celem C, więc nie przejmuj się, jeśli to jest trywialne.
Jeśli zrobię lokalną kopię „dane” i nigdy za darmo to wtedy wszystko działa dobrze, ale oczywiście przecieki:
unsigned char *copy_of_data = new unsigned char[len];
memcpy(copy_of_data, data, len);
Jak mogę albo:
(1) sprawiają, że initWithBitmapDataPlanes tworzyć własna kopia i deallocation handle?
lub (2) samodzielnie uwolnić dane, gdy jest to potrzebne, po tym, jak obraz przestał go potrzebować?
Ooh! Tęsknie za tym. Dam mu wir i zobaczę, czy to działa. – spartygw
To działa idealnie! Dziękuję Ci bardzo. – spartygw