2011-04-05 32 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