arrays - 在 Swift 中将图像十六进制转储转换为二进制数组的更快方法

标签 arrays swift image hexdump cfdata

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

  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

}

最佳答案

我会试试这个 NSData 的扩展,它提供了 CollectionType界面。看起来它会让您更容易地进行修改,而无需使用 UnsafeMutablePointer:

Bytes collection for NSData

由于 BytesViewMutableBytesView 是一个 CollectionType,它为您提供下标、索引等,因此您可以遍历数据并创建你想要的改变。

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

NSData, My Old Friend

关于arrays - 在 Swift 中将图像十六进制转储转换为二进制数组的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38377272/

相关文章:

jquery - 如何检查 DIV 是否包含带有相对 src 路径的 IMG 标签?

Java-像素数组不从另一个类渲染另一个类

swift - 为什么像 👩‍👩‍👧‍👦 这样的表情符号字符在 Swift 字符串中处理得如此奇怪?

php - 将图像从swift上传到php服务器时出错

python - 将灰度图像转换回矢量

css - 在 CSS 中将两个图像淡入淡出

Java 错误;需要数组,但找到了 java.lang.String

PHP SQL : GROUP BY as array index

java - 如何在showMessageDialog中打印双二维数组?

javascript - WKWebView:页面加载后调用javascript