スクリーンショットを撮り、サイズを変更し、TCP/IP 経由で iPhone アプリケーションに送信する Java サーバーを作成しました。次に、アプリケーションは NSInputStream を使用して着信画像データを収集し、バイト バッファーを使用して NSMutableData インスタンスを作成し、UIImage オブジェクトを作成して iPhone に表示します。基本的に、画面共有。画像データを収集するための私のiPhoneコードは現在次のとおりです。
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent{
if(streamEvent == NSStreamEventHasBytesAvailable && [iStream hasBytesAvailable]){
uint8_t buffer[1024];
while([iStream hasBytesAvailable]){
NSLog(@"New Data");
int len = [iStream read:buffer maxLength:sizeof(buffer)];
[imgdata appendBytes:buffer length:len];
fullen=fullen+len;
/*Here is where the problem lies. What should be in this
if statement in order to make it test the last byte of
the incoming buffer, to tell if it is the End of Image marker
for the end of incoming JPEG file?
*/
if(buffer[len]=='FFD9'){
UIImage *img = [[UIImage alloc] initWithData:imgdata];
NSLog(@"NUMBER OF BYTES: %u", len);
image.image = img;
}
}
}
}
コード内のコメントで示されているように、私の問題は、NSMutableData オブジェクトでデータの収集をいつ停止し、そのデータを使用して UIImage を作成するかを判断することです。これが送信されたときに画像が表示できるようになるため、着信バイトで JPEG ファイルの終わりマーカー (画像の終わり (EOI) マーカー (FFD9)) を探すのは理にかなっているようです。これをテストするにはどうすればよいですか?データがどのように保存されているか、または JPEG ファイル内のマーカーについて何かが欠けていますが、これをテストするための助けがあれば大歓迎です!
ジェームズ