我有这个代码将填充了RGB数据的NSData对象转换为填充了RGBA数据的NSData对象,然后将其转换为图像并显示。不幸的是,仪器显示我的记忆稳步攀升,而且我的rgbaData对象在下面的代码中永远不会消失。
- (NSData *)uint8RGBADataOfSize:(NSUInteger)size fromRGBData:(NSData *)rgbData
{
NSMutableData *rgbaData = [[NSMutableData alloc] initWithLength:(size * 4 * sizeof(uint8_t))];
uint8_t *rgba = rgbaData.mutableBytes;
const uint8_t *rgb = rgbData.bytes;
for(int i = 0; i < size; ++i)
{
rgba[4*i+0] = rgb[3*i];
rgba[4*i+1] = rgb[3*i+1];
rgba[4*i+2] = rgb[3*i+2];
rgba[4*i+3] = 255;
}
return rgbaData;
}
我这样调用上面的方法:
data = [self uint8RGBADataOfSize:(width * height) fromRGBData:data];
数据是带有rgb数据的原始NSData,我只是用新创建的rgba NSData替换它,然后再创建一个图像:
CGDataProviderRef provider = CGDataProviderCreateWithData(nil, data.bytes, totalBytes, nil);
CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, provider, nil, NO, kCGRenderingIntentDefault);
在创建上述提供程序后,我的新数据未被使用,并且在我将UIImage传回后,我的方法很快就存在了。这里的一切对我来说都很好,但我最终得到了来自我的uint8RGBADataOfSize:fromRGBData:
方法的不断增加的Malloc 84.00 KB。在这一点上,我很难过,任何人都有任何想法?