2016-07-14 68 views
1

我需要編輯圖像的像素原始二進制值。爲此,我這樣做了:在Swift中將圖像十六進制轉儲轉換爲二進制數組的更快捷方式

  1. 我獲得了包含圖像的十六進制轉儲的CFData。

  2. 我轉換CFData獲得字符(使用convertToArray功能)

  3. 的陣列在這之後,我用convertToBinaryString函數來獲得代表十六進制轉儲的基座2值的字符串。

它可以工作,併爲小文件做這項工作,但是當涉及到較大的文件需要永久完成。我在尋找更快捷方式的努力中失敗了。你可以幫幫我嗎?

下在這裏你可以看看我需要優化的功能:

func convertToArray(imageData : CFData) -> Array<Character>{ 
    let arrayData : Array<Character> = Array(String(NSData(data: imageData)).characters) 
    print("Array : ") 
    Swift.print(arrayData) 
    return arrayData 
} 

func convertToBinaryString(array : Array<Character>) -> String{ 
    let numberOfChars = array.count 
    var binaryString = convertHexToBinary(array[1]) 
    for character in 2...numberOfChars - 2{ 
     binaryString = binaryString + convertHexToBinary(array[character]) 
    } 
    // print("BINARRY ARRAY : ") 
    // print(binaryString) 
    return binaryString 

} 
+0

我很好奇,如果你最終要在'0's和'1's二進制表示,爲什麼將它存儲在'String'中? – Alexander

+1

'imageData' *是二進制數據。然後你用這個數據的十六進制描述創建一個字符串,然後再次提取字節...... –

+0

當你說你需要編輯原始二進制值時,你究竟如何編輯它們?你一次需要一定範圍的價值嗎? – ColGraff

回答

0

我會嘗試這個擴展NSData,提供了一個CollectionType接口。看起來這將使它更容易爲你做你的修改,而不必繞多少與UnsafeMutablePointer

Bytes collection for NSData

由於BytesViewMutableBytesViewCollectionType它給你下標,索引,更使你可以迭代您的數據並進行所需的更改。

的物品,其是有關這個問題,並介紹了鏈接代碼:

NSData, My Old Friend

+1

請注意,在Swift 3中,大部分都是內置的。新的'Data'結構是一個MutableCollection。 –

+0

非常感謝!我將講述你告訴我的內容,並嘗試使用這些信息來實現一種方法。 –

+0

@RobNapier我不能等待它,Swift 3會動搖並提供很多重大改變。哦,我希望你繼續在你的博客上發帖,我從中學到了很多有用的技巧。謝謝! – ColGraff

相關問題