2

現在、objective-c でオシロスコープ (agilent DSO7104B) と接続しています。私の目標は、オシロスコープの画面に画像を表示することです。スコープが bmp データを送信し、それを空のファイルに入れて開こうとしましたが、画像が奇妙に表示され、一種のオフセットが発生します。これが私のコードです:

NSString *str = @":DISP:DATA? BMP, SCR, GRAY\r\n";
NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:(uint8_t *)[strData bytes] maxLength:[strData length]];

[NSThread sleepForTimeInterval:1];

uint8_t buf[1024];
[((NSInputStream *) inputStream) read: buf maxLength: 1024];

uint8_t *buff;
buff=malloc(2546752);
memset (buff, 0, 2546752);
//buff=malloc(2551000);
//memset (buff, 0, 2551000);

int len;
[self makeNewFile];
int count=0;
for(int i=0; i<8; i++){
    len = [((NSInputStream *) inputStream) read: &(buff[count]) maxLength: 318344];
    count=count+318344;
    [NSThread sleepForTimeInterval:3];
}
//[self printImage: buff: 2546742];
[self printImage: buff: 2546752];

そして、ここにprintImage関数があります:

- (void) printImage: (uint8_t*) buff : (int) len{
NSFileManager *manager;
manager = [NSFileManager defaultManager];
NSData *buffer;
NSFileHandle *fin, *fout;
fin = [NSFileHandle fileHandleForReadingAtPath:instancePath];
fout = [NSFileHandle fileHandleForWritingAtPath:instancePath];

if([manager fileExistsAtPath:instancePath]==NO){
    NSLog(@"Unreachable path");
}
if([manager fileExistsAtPath:instancePath]==YES){
    NSLog(@"File ready");
}

//buffer = [NSData dataWithBytes:&(buff[10]) length:2546742-10];
buffer = [NSData dataWithBytes:&(buff[10]) length:2546752-10];
//buffer = [NSData dataWithBytes:buff length:2546742];

[fout writeData:buffer];
[fin closeFile];
[fout closeFile];

コメントされたコードはすべて、私がもう使用していないテストコードです。スコープから 2546752 バイトのデータが送信されます。これには、bmp ファイルに含まれてはならない 10 バイトのヘッダーが含まれます。telnet バッファーが小さすぎるため、8 サンプル (for ループ) で取得する必要があります。最初の読み取り (buf 1024 バイト) は、スコープが画像の前に送信する可能性のあるデータの入力ストリームをクリアするためのものです。16 進エディタでファイルを開くと、ビットマップ ヘッダー ("BM...") が表示されるため、最初のデータは適切に得られると確信していますが、"コア" は得られないと思います。私がすべきファイル...編集:2年後、まだ問題が見つかりません...あきらめました

4

0 に答える 0