【发布时间】:2013-04-18 23:25:28
【问题描述】:
我正在从 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) 在图像不再需要数据后,在适当的时候自行释放数据?
【问题讨论】:
标签: objective-c cocoa nsimage