Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用';压缩编码缓冲区&x27;斯威夫特?_Ios_Swift_Image Compression - Fatal编程技术网

Ios 如何使用';压缩编码缓冲区&x27;斯威夫特?

Ios 如何使用';压缩编码缓冲区&x27;斯威夫特?,ios,swift,image-compression,Ios,Swift,Image Compression,我正在使用Swift的压缩库将图像压缩为NSData。 代码如下: var imageCompressed:NSData compression_encode_buffer( imageCompressed ,800000 , imageSelected , size , NULL , COMPRESSION_LZMA ) 我收到以下错误消息: 无法将NSData类型的值转换为预期的参数类型UnsafeMutablePointer 正如Matt所说,您不能写入NSData对象,因为它是不可变的

我正在使用Swift的压缩库将图像压缩为NSData。 代码如下:

var imageCompressed:NSData
compression_encode_buffer( imageCompressed ,800000 , imageSelected , size , NULL , COMPRESSION_LZMA )
我收到以下错误消息:

无法将NSData类型的值转换为预期的参数类型UnsafeMutablePointer


正如Matt所说,您不能写入NSData对象,因为它是不可变的。我强烈建议您改用Swift标准库
数据
类型。然后,您可以使用unsafemtablebytes调用
,并在其闭包内执行您想要的操作

我认为您想要的是这样的东西(
imageSelected
imagescompressed
被假定为Swift 3数据对象):

imageSelected.withUnsafeBytes{(fromBytes:UnsafePointer)->Void in
imageCompressed.WithUnsafemtableBytes{(toBytes:UnsafemtablePointer)->中的Void
压缩编码缓冲区(toBytes、toSize、fromBytes、fromSize、nil、压缩LZMA)
}
}

您无法写入NSData。它是不变的!还有-你还在使用Swift 2吗???还有,这不是一个好的图像压缩算法。根据需要使用JPEG、PNG或HEIF。您能帮助我了解压缩\编码\缓冲区的参数吗?这将是另一个问题。我想我回答了你问的问题。是的,但是什么是toBytes,toSIze,fromBytes,fromSize?请帮我解决这个
withUnsafeBytes
调用一个你指定的闭包,它将指针传递到图像的原始数据缓冲区(你可以自由地将其键入任何内容,例如UInt8)。然后在闭包中使用缓冲区。这里他有两个电话
fromBytes
是源图像数据
toBytes
是目标缓冲区(首先需要像
var-imageCompressed=Data(容量:MAX\u COMPRESSED\u SIZE)
fromSize
是以字节为单位的图像缓冲区大小,
toSize
imageCompressed
缓冲区大小(必须>=压缩所需的量)
imageSelected.withUnsafeBytes {(fromBytes: UnsafePointer<UInt8>) -> Void in
    imageCompressed.withUnsafeMutableBytes {(toBytes: UnsafeMutablePointer<UInt8>) -> Void in
        compression_encode_buffer(toBytes, toSize, fromBytes, fromSize, nil, COMPRESSION_LZMA)
    }
}