2016-07-14 17 views
1

イメージのピクセルの生のバイナリ値を編集する必要があります。このため、私はこのステップを実行しました:Swiftのイメージヘックスダンプをバイナリ配列に変換する方法をより速く

  1. イメージの16進ダンプを含むCFDataを取得しました。私はCFDataはその後(convertToArray関数を使用)文字の配列に

  2. を得変換

  3. 、Iヘキサダンプのベース2値を表す文字列を取得するためにconvertToBinaryString関数を用います。

小さなファイルの場合は機能しますが、大きなファイルの場合は処理が永久に終わります。私はより速い方法を見つけるのに苦労しました。私たちを手伝ってくれますか?ダウンここ

私は最適化に必要な機能の外観をとることができます。

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'は*バイナリデータです。次に、そのデータの16進数の記述を含む文字列を作成し、再度バイトを抽出します。 –

+0

生のバイナリ値を編集する必要があると言うとき、それらをどのくらい正確に編集していますか?一度に一定の範囲の値が必要ですか? – ColGraff

答えて

0

私はCollectionTypeインタフェースを提供しNSDataにこの拡張機能をしようとするだろう。

BytesView以来

Bytes collection for NSData

MutableBytesViewは、CollectionTypeが、それはあなたが添字与え指標であり、より多くのあなたは:それはUnsafeMutablePointerの周りあまりせずにあなたの変更を行うことのためにそれははるかに簡単になるだろうように思えますデータを繰り返し処理し、必要な変更を加えることができます。

コードリンクこの質問と紹介に関連する記事:

NSData, My Old Friend

+1

Swift 3では、ほとんどが組み込みであることに注意してください。新しい 'Data'構造体はMutableCollectionです。 –

+0

ありがとうございました!あなたが私に言ったことを講義し、この情報を使ってメソッドを実装しようとします。 –

+0

@RobNapier私はそれを待つことができません、スウィフト3は物事を振って、大きな変化をたくさん提供します。ああ、私はあなたのブログに投稿し続けることを願っています。私はそれからかなりのヒントを学びました。ありがとう! – ColGraff

関連する問題