我需要编辑图像像素的原始二进制值。为此,我执行了以下步骤:
我获得了包含图像十六进制转储的 CFData。
我将获得的CFData转换为字符数组(使用convertToArray函数)
之后,我使用 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
:
由于 BytesView
和 MutableBytesView
是一个 CollectionType
,它为您提供下标、索引等,因此您可以遍历数据并创建你想要的改变。
与此问题相关并介绍链接代码的文章:
关于arrays - 在 Swift 中将图像十六进制转储转换为二进制数组的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38377272/