【问题标题】:How to pull UIImages from NSData from a socket如何从套接字中从 NSData 中提取 UIImages
【发布时间】:2010-05-11 20:32:53
【问题描述】:

我正在使用 ASyncSocket 将一些 UIImages 从一个设备移动到另一个设备。

基本上,在我拥有的一台设备上:

NSMutableData *data = UIImageJPEGRepresentation(image, 0.1);

if(isRunning){
    [sock writeData:data withTimeout:-1 tag:0];
}

因此,每隔一段时间就会向套接字添加一个新图像(如网络摄像头)。

然后,在另一台设备上,我正在呼叫:

[listenSocket readDataWithTimeout:1 tag:0];

它将响应:

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    [responseData appendData:data];
    [listenSocket readDataWithTimeout:1 tag:0];
}

基本上,我想要做的是让 NSTimer 运行,它会调用 @selector(PullImages):

-(void) PullImages {

在这里,我希望能够从 ResponseData 中提取图像。我怎么做? 可能还没有完整的图像,可能有多个图像,可能有一个半图像!

我想将 NSData 解析到每个现有图像中!

}

有什么帮助吗?提前致谢!

【问题讨论】:

    标签: iphone uiimage nsdata asyncsocket


    【解决方案1】:

    您必须围绕图像实现自己的包装协议。这可以像在实际图像数据之前发送图像数据的长度一样简单。接收数据时,您现在知道需要提取多少字节才能获得完整的图像。由于每个图像都从流中分离出来,因此您拥有下一个图像的长度。

    由于您是从一部 iPhone 发送到另一部 iPhone,因此您不必担心字节顺序,只需在每一端使用 32 位 int 即可。

    【讨论】:

    • 啊,该死的,我希望不必这样做。如何确保我首先得到整数?我可以假设事物被转储为 int、image、int、image 等吗?所以我读取前几个字节,然后读取指定的字节量,然后读取接下来的几个字节,然后读取指定的字节量?你能提供一个例子或布局吗?我不需要特定的代码。
    • 如果您使用的是 tcp 套接字,那么是的,您可以假设您的长度会在图像之前出现。然后,您将读取前 4 个字节(对于您的 int),然后将这 4 个字节的值读入您的数据缓冲区。
    【解决方案2】:

    只需使用分隔符来分别识别不同的图像。当您抓住分隔符时,您就知道接下来是另一个图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      相关资源
      最近更新 更多