2012-09-04 2 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의 사용에 혼란을 조금이다. 이미지 데이터를 원거리 (far end)로 전송하는 동안 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;