1

我需要编辑图像的像素原始二进制值。为此,我执行了以下步骤:

  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

}
4

1 回答 1

0

我会尝试这个NSData提供CollectionType接口的扩展。似乎它可以让您更轻松地进行修改,而不必花太多时间UnsafeMutablePointer

NSData 的字节收集

因为它为您提供下标、索引BytesView等功能,因此您可以遍历数据并进行所需的更改。MutableBytesViewCollectionType

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

NSData,我的老朋友

于 2016-07-14T16:47:09.467 回答