在我的iOS端,我通过NSInputStream收到了一组图像。 NSMutableData
将在[JPG IMAGE][JPG IMAGE][PNG IMAGE]
中包含图片。
有没有优雅的方式从NSMutableData
获取图像?
服务器(.Net
):连续发送图片,因此在客户端(iOS
)我永远不会遇到NSStreamEvent.EndEncountered
。关闭NetoworkStream
会让我ObjectDisposedException was unhandled, cannot access a disposed object
(fixing it now)
客户端:不知道服务器何时完成发送,它只有一个NSMutableData
。 (fixing it now)
我将buffer
转换为NSData
并将其附加到NSMutableData
基本上我想要达到的目标是:
1.我在我的客户端(iOS app
)上按连接,
2.与服务器建立连接(.Net
)
3.服务器创建并向客户端发送图像
4.客户端显示图像。
5.客户端启动的连接和断开连接。
更新:我通过以下方式开展工作:
1.在服务器端,在每个图像发送后,我附加一个分隔符。
2.在客户端,我照常将数据附加到NSMutableData
并检查delimeter
的最后几个字节。如果匹配,我可以安全地继续通过分隔符对NSMutableData
进行分块。
答案 0 :(得分:1)
您可以使用
[UIImage imageWithData:[yourMutableData copy]]
没有必要复制。它使你的可变数据变得不可变,你得到了副本。
答案 1 :(得分:0)
您可以使用
NSData * data = yourData;
UIImage * image = [UIImage imageWithData:data];
答案 2 :(得分:0)
这是可能的,但在你的情况下会很棘手 - 因为你指出NSMutableData
将包含多种类型的图像( JPEG / PNG < / em>的)。
如果我们假设数据格式良好,那么探索和分离数据的最佳方式是通过文件签名:
将其合并以将大量数据分成数据块数组。您必须逐字节地查找子序列并检查子序列是否恰好是JPEG或PNG文件。然后简单地初始化您的UIImage
对象:
var dataArray: [NSMutableData] = [imageData1, imageData2, imageData3]
var imageArray: [UIImage] = []
for imgData in dataArray {
if let image = UIImage(data: imgData) {
imageArray.append(image)
}
}