2016-07-14 96 views
1

我需要编辑图像的像素原始二进制值。为此,我这样做了:在Swift中将图像十六进制转储转换为二进制数组的更快捷方式

  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 

} 
+0

我很好奇,如果你最终要在'0's和'1's二进制表示,为什么将它存储在'String'中? – Alexander

+1

'imageData' *是二进制数据。然后你用这个数据的十六进制描述创建一个字符串,然后再次提取字节...... –

+0

当你说你需要编辑原始二进制值时,你究竟如何编辑它们?你一次需要一定范围的价值吗? – ColGraff

回答

0

我会尝试这个扩展NSData,提供了一个CollectionType接口。看起来这将使它更容易为你做你的修改,而不必绕多少与UnsafeMutablePointer

Bytes collection for NSData

由于BytesViewMutableBytesViewCollectionType它给你下标,索引,更使你可以迭代您的数据并进行所需的更改。

的物品,其是有关这个问题,并介绍了链接代码:

NSData, My Old Friend

+1

请注意,在Swift 3中,大部分都是内置的。新的'Data'结构是一个MutableCollection。 –

+0

非常感谢!我将讲述你告诉我的内容,并尝试使用这些信息来实现一种方法。 –

+0

@RobNapier我不能等待它,Swift 3会动摇并提供很多重大改变。哦,我希望你继续在你的博客上发帖,我从中学到了很多有用的技巧。谢谢! – ColGraff