2011-04-05 69 views
2

我正在使用C的CFITSIO库读取大型FITS图像。首先,实际图像/像素不被读入。只有当某种操作需要完成时(比如平均几张图像)将图像作为双数组加载到内存中。我将每个图像表示为一个ImageListing类型的对象(一个自定义类)。这个类知道如何读写适合文件。NSData适用于大型c数组吗?

为了表示一系列图像,我在另一个类中使用了一个名为ImageStacker的NSMutableArray。 ImageStacker实现了可以平均,减去,求和图像的方法。显然,为了完成这些操作,这个类需要访问原始像素,它通过发送消息returnPixelsFrom:(NSInteger)Row获得。

我的问题是,应当I:

1)阅读在上述提到的方法中的像素,但是它们读成C阵列(double型)多数民众赞成通过引用传递。

OR

2)I应该阅读像素划分为本地C数组,但然后撰写使用dataWithBytes:length一个NSData对象和从所述方法返回该对象。

选项2对1有什么优势?请记住,当平均/添加像素时,我将不得不使用C数组,所以为此目的继续使用纯粹的C数组不是更好吗?

+0

我真的很好奇 - 是什么指向你使用NSData的呢? – 2011-04-05 08:07:19

+0

读取NSData类参考给我的印象是,如果我们想要在Cocoa中处理原始数据,这是一条路。但我同意你的看法,对我来说这似乎是一个毫无意义的练习,因为我所做的只是将NSData对象从数据中提取出来,然后在需要处理时再次分解它。感谢您的回应。 – saad 2011-04-05 12:58:52

回答

1

我认为你想要使用NSData的唯一原因是,如果你需要将这些位交给一个Cocoa类,比如NSDictionary,它不知道如何处理一个plain-C数组,或者想使用Cocoa归档或序列化数据。

如果您正在生成(或加载)这些位并在您的自定义例程中对它们进行了所有工作,那么我会说它以任何最适合您的格式保留,特别是如果您要将数据粘贴到一个NSData,然后把它们拉出来。然而,可能有些东西我不知道NSData会对你有利。

+0

NSData具有_massive_优势。像正确处理对象生命时间一样,访问内存映射文件,通过一次调用读取/写入文件。 – gnasher729 2014-05-29 11:03:52