【发布时间】:2016-11-17 13:14:55
【问题描述】:
我需要编辑图像的像素原始二进制值。为此,我执行了以下步骤:
我获得了包含图像十六进制转储的 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
}
【问题讨论】:
-
我很好奇,如果您最终想要在
0s 和1s 中使用二进制表示,为什么将其存储在String中? -
imageData是二进制数据。然后你用该数据的十六进制描述创建一个字符串,并再次提取字节...... -
当您说您需要编辑原始二进制值时,您究竟是如何编辑它们的?您一次需要一定范围的值吗?
-
@ColGraff 对于某些像素,我想将二进制表示中的值 1 更改为 0。这就是我编辑它们的意思。
-
@MartinR,也许我无法表达我的想法。我需要“ 11111111111111111111111111111111 ”而不是“ ffffffff ”,并且对于某些像素,我想将一些值更改为 1 为 0。这是我的图像所需的“二进制数据”。
标签: arrays swift image hexdump cfdata