前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >智能小车的图像播放器

智能小车的图像播放器

作者头像
用户1170933
发布2022-05-10 14:41:34
3980
发布2022-05-10 14:41:34
举报
文章被收录于专栏:python开发者python开发者

智能小车的图像播放器

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

图像播放器:

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

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

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

image
image

主要的技术问题就是:读文件,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.定时器

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档