我目前在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 ...”),但我认为我没有得到“核心”我应该的文件......编辑:两年后,仍然没有发现问题......放弃