在Swift

时间:2016-07-14 14:44:28

标签: arrays swift image hexdump cfdata

我需要编辑图像的像素原始二进制值。为此,我做了这个步骤:

  1. 我获得了包含图像的十六进制转储的CFData。

  2. 我将获取的CFData转换为字符数组(使用convertToArray函数)

  3. 之后,我使用convertToBinaryString函数来获取表示十六进制转储的基数2值的字符串。

  4. 它可以正常工作并完成小文件的工作,但是当涉及到较大的文件时,它需要永远完成。我找不到更快的方法而努力失败。你能帮帮我吗?

    在这里,你可以看看我需要优化的功能:

    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
    
    }
    

1 个答案:

答案 0 :(得分:0)

我会尝试将此扩展名提供给提供CollectionType接口的NSData。看起来它可以让您更轻松地进行修改而无需使用UnsafeMutablePointer

Bytes collection for NSData

由于BytesViewMutableBytesViewCollectionType,它会为您提供下标,索引等,以便您可以遍历数据并进行所需的更改。

与此问题相关的文章,并介绍了链接代码:

NSData, My Old Friend