我正在从 24 位 RGB 数据的 unsigned char * 创建一个 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];
我遇到的问题是我后来向“数据”写了更多的东西,我知道 NSImage 没有复制它。我这么说是因为如果我稍后将所有 0 写入我的数据缓冲区,那么图像就会全黑。
我在 Objective C 上苦苦挣扎,所以如果这是微不足道的,请耐心等待。
如果我制作“数据”的本地副本并且从不释放它,那么一切都会很好,但显然会泄漏:
unsigned char *copy_of_data = new unsigned char[len];
memcpy(copy_of_data, data, len);
我怎么能:
(1) 让 initWithBitmapDataPlanes 创建自己的副本并处理释放?
或者(2)在图像不再需要它之后,在适当的时候自己释放数据?