0

ストリームバイトを取得して画像に変換する方法、以下は私のコードです。しかし、私が得る画像は空白です。なんで?コードの何かが間違っていますか?

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;

}

}

4

1 に答える 1

1

これは、NSOutPutStream を使用する際に少し混乱します。1 つ (ファー エンド) で画像データを送信している場合でも、受信には 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;
于 2012-09-04T12:14:08.853 に答える