智能小车的图像播放器

2022-05-10 14:41:34 浏览数 (2)

智能小车的图像播放器

作者:一点一滴的Beer http://beer.cnblogs.com/

图像播放器:

     智能小车利用车载摄像头采集跑道数据,然后存储到小车中央控制主板的存储器中。等小车跑完一周后,再串口通讯传到电脑上,并保存为二进制文件。

     然后这个软件就是读取这个二进制文件,每次读取40*80=3200个数据上来,然后用GDI绘制3200个灰度像素点,用定时器,每隔一段时间从文件中读取数据并重新绘制一次,然后就形成了这种动画类似于播放器的功能了。

     这是自己大三的时候用VC6.0写的一个软件,现在想来,其实实用性不强,仅可以把现场的数据采集上来,做一些上位机的仿真。不过,也算是自己大三的一点小心血吧。现在清理硬盘,把这个软件的效果演示做成一个视频,作个纪念,然后再删除吧。

主要的技术问题就是:读文件,GDI绘图,定时器。

1.读文件

代码语言:javascript复制
void CPicMovieDlg::OnOpenfile() 
{
	// TODO: Add your control notification handler code here
	//打开文件
	//创建文件名缓存(fileBuffer)和文件读取缓存(rBuffer)
	//此处如果不把缓存置,在后面的设定中就会出错,如果是动态申请的,请用memset或者for循环把数组清零
	char fileBuffer[5010] = {0}, rBuffer[row * column] = {0};

	//定义一个CFile类,用来处理文件
//	CFile in;//放到此对话框的成员变量中。因为我要持续对此文件进行操作。要有较长的生成周期。???权宜之计
	//定义一个CFileDialog类,用来显示标准的打开文件对话框
	CFileDialog inDlg(FALSE, NULL, NULL, NULL, _T("自定义文件类型(*.sav)|*.sav|所有文件(*.*)|*.*||"), NULL);
	inDlg.m_ofn.lpstrTitle = _T("打开自定义文件");
	//设定一个文件名缓存,因为CFileDialog内置的文件名缓存长度只有,但是很多时候,文件的路径远大于这个数,为了保险起见,所以要自己设定一个文件名缓存
	inDlg.m_ofn.lpstrFile = fileBuffer;
	//设定缓存长度
	inDlg.m_ofn.nMaxFile = 5000;
	//显示对话框,并处理按了确定按钮的事件
	if(inDlg.DoModal() == IDOK) {
		//以只读方式打开文件
		if(in.Open(inDlg.GetPathName(), CFile::modeRead)) {			


			OperateFile();	
			bStopFlag = 1;//打开文件后,不自动播放。
			//关闭文件		
			//in.Close();//将此语句放在程序结束时。		
			
		//	MessageBox("打开文件成功", "搞定了", MB_ICONEXCLAMATION | MB_OK);
		} else {
			MessageBox("打开文件失败,可能您没有关闭当前文件", "失败了", MB_ICONSTOP | MB_OK);
			bOpenFlag = 0;
		}
}
	
}

2.GDI绘制像素点

代码语言:javascript复制
void CPicMovieDlg:: DrawOrigin(BYTE dataTemp[][column],CDC* pDC)
{
	for (int i=0;i<row;i  )
		for (int j=0;j<column;j  )
		{	
			int recWidth=8;
			int recHeight=14;
			COLORREF clrRec=RGB(dataTemp[i][j],dataTemp[i][j],dataTemp[i][j]);
			pDC->Rectangle(recWidth*j/2,recHeight*i/2,recWidth*(j 1)/2,recHeight*(i 1)/2);
			//下面的填充函数将原来有的笔刷效果全部给覆盖了。
			pDC->FillSolidRect(recWidth*j/2,recHeight*i/2,recWidth/2,recHeight/2,clrRec);	
			
		}
}

3.定时器

    在对话框初始化的时候,设置定时器,然后再到定时器的事件中执行绘图函数。具体用法可以到网上查阅。

    结尾:本文不作为技术文,只是作为自己的一个回忆纪念文吧。所以,没有详细对解决问题的细节进行说明了。写完本文后,就直接将源代码全部删除了。只留下了上面的那些思路了。

0 人点赞