2012-09-04 86 views
0

如何获取流字节并将其转换回图像,下面是我的代码。 但我得到的图像是空白的。为什么? 代码有问题吗?如何获取流字节并将其转换回图像 - IOS

我从我的NSOutputStream获取字节并将其转换回NSData,然后将NSData转换为图像。

(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { 

switch (streamEvent) { 

case NSStreamEventOpenCompleted: 
    NSLog(@"Stream opened"); 
    break; 
case NSStreamEventHasBytesAvailable: 

    if (theStream == inputStream) { 

     uint8_t buffer[5000]; 
     int len; 

     while ([inputStream hasBytesAvailable]) { 
      len = [inputStream read:buffer maxLength:sizeof(buffer)]; 
      NSLog(@"len=%d", len); 
      if (len > 0) { 

       NSData *pictureData = [NSData dataWithBytes:buffer length:len]; 

       UIImage *imagess = [[UIImage alloc]initWithData:pictureData]; 
       [imagesview setImage:imagess]; 




           } 

     } 
    } 
    break; 

} 

}

回答

1

这一点在你使用NSOutPutStream的混乱。虽然您可能正在发送图像数据(远端),但您必须使用NSInputStream来接收图像数据,否?

你应该在'NSStreamEventHasBytesAvailable:'中做什么,只是将数据附加到可变数据对象。当你最终得到'NSStreamEventEndEncountered'时,那就是当你得到你的图像时:

{ 
    NSMutableData *data; // ivar 
} 

    // init it somewhere 
    data = [NSMutableData new]; 

case NSStreamEventHasBytesAvailable: 

if (theStream == inputStream) { 

    uint8_t buffer[5000]; 
    int len; 

    while ([inputStream hasBytesAvailable]) { 
     len = [inputStream read:buffer maxLength:sizeof(buffer)]; 
     NSLog(@"len=%d", len); 
     if (len > 0) { 
      [data appendBytes:(const void *)buffer length:len]; 
     } 
    } 
} 
break; 

case NSStreamEventEndEncountered: 
{ 
    if (theStream == inputStream) { 
     UIImage *imagess = [[UIImage alloc]initWithData:data]; 
     [imagesview setImage:imagess]; 
    } 
} break; 
相关问题