spa*_*ygw 6 cocoa objective-c nsimage
我正在使用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];
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我后来在"数据"中写了更多东西,我知道NSImage并没有复制它.我这样说是因为如果我稍后将所有0写入我的数据缓冲区,那么图像全黑.
我正在与Objective C挣扎,所以如果这是微不足道的话请耐心等待.
如果我制作一份"数据"的本地副本并且永远不会释放它,那么事情就会很好,但显然会泄漏:
unsigned char *copy_of_data = new unsigned char[len];
memcpy(copy_of_data, data, len);
Run Code Online (Sandbox Code Playgroud)
我怎么能:
(1)使initWithBitmapDataPlanes创建自己的副本并处理deallocation?
或者(2)在图像不再需要之后,在适当的时候自己释放数据?
也许,最简单传递NULL的planes参数.然后,在分配并初始化图像代表之后,请求它并将其-bitmapData复制到其中.这种方法在文档中提出:
如果planes是NULL或NULL指针数组,则此方法分配足够的内存来保存其他参数描述的图像.然后,您可以获取指向此内存的指针(使用getPixel:atX:y:或bitmapData方法)并填写图像数据.在这种情况下,分配的内存将属于该对象,并在释放时释放.
强调补充说.