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 字节的数据,其中包括一个 10 字节的标头,该标头不得在 bmp 文件中。我必须通过 8 个样本(for 循环)来获取它,因为否则 telnet 缓冲区太小。第一次读取(buf 1024 字节)是为了清除示波器可能在图像之前发送的任何数据的输入流。我确信我得到了良好的开始数据,因为如果我在十六进制编辑器中打开文件,我可以看到位图标题(“BM ...”),但我认为我没有得到“核心”我应该的文件......编辑:两年后,仍然没有发现问题......放弃

4

0 回答 0