我目前正在使用objective-c中的示波器(安捷伦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字节标头。我必须得到8个样本(for循环),因为telnet缓冲区太小了。 第一个读数(buf 1024字节)用于清除示波器在图像之前发送的任何数据的输入流。 我确信我得到了良好的开始数据,因为,如果我在十六进制编辑器中打开文件,我可以看到位图标题(“BM ...”),但我想我没有得到“核心”的我应该...... 编辑:两年后,仍然没有发现问题...放弃