从Swift 3中的Objective-C calloc重构

从Swift 3中的Objective-C calloc重构,objective-c,swift,Objective C,Swift,我正在将使用calloc()创建缓冲区的Objective-C类转换为Swift 3。以下是我对代码的相关部分有异议的部分。特别是rawData赋值和用法 CGImageRef imageRef = [capturedImage CGImage]; NSUInteger width = CGImageGetWidth(imageRef); NSUInteger height = CGImageGetHeight(imageRef); unsigned char *rawData = (unsi

我正在将使用
calloc()
创建缓冲区的Objective-C类转换为Swift 3。以下是我对代码的相关部分有异议的部分。特别是
rawData
赋值和用法

CGImageRef imageRef = [capturedImage CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);

unsigned char *rawData = (unsigned char *)calloc(height * width * 4, sizeof(unsigned char));

NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height,
    bitsPerComponent, bytesPerRow, colorSpace,
    kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

NSUInteger byteIndex = (bytesPerRow * y) + x * bytesPerPixel;

CGFloat red = (CGFloat)rawData[byteIndex];
CGFloat green = (CGFloat)rawData[byteIndex + 1];
CGFloat blue = (CGFloat)rawData[byteIndex + 2];

CGBitmapContextCreate

数据:不可女性化的指针

指向内存中要渲染图形的目标的指针。此内存块的大小应至少为
(bytesPerRow*高度)
字节

如果希望此函数为位图分配内存,请传递
NULL
。这将使您从管理自己的内存中解放出来,从而减少内存泄漏问题

虽然您可以找出如何分配所需的内存块并获取指向它的
unsafemtablerawpointer
,除非您有充分的理由分配自己的缓冲区,但只需按照文档进行操作并传递
NULL
——根本不需要使用
calloc()


HTH

来自
CGBitmapContextCreate

数据:不可女性化的指针

指向内存中要渲染图形的目标的指针。此内存块的大小应至少为
(bytesPerRow*高度)
字节

如果希望此函数为位图分配内存,请传递
NULL
。这将使您从管理自己的内存中解放出来,从而减少内存泄漏问题

虽然您可以找出如何分配所需的内存块并获取指向它的
unsafemtablerawpointer
,除非您有充分的理由分配自己的缓冲区,但只需按照文档进行操作并传递
NULL
——根本不需要使用
calloc()


HTH

Hmmm,这篇文章似乎很有希望:创建一个
Data
实例并使用其不安全字节。这可能有帮助:Hmmm,这篇文章似乎很有希望:创建一个
Data
实例并使用其不安全字节。这可能有帮助: