这是我参加安利杯计算机作品赛的银奖作品--旋转LED显示屏取模软件
结合硬件,能够得到相当好的效果
图片查看http://www.untree.net/text.php?id=69
如果有需要使用或者定做的的朋友,可以联系我,请见我们网站的联系方式
另外本人也可以定做各做LED显示屏取模软件
旋转LED显示屏取模软件
概述:
旋转LED显示屏取模软件是一种对旋转LED显示屏取模的图形图像工具软件,软件对于旋转
LED的制作起到至关重要的作用。该软件能够对bmp位图文件或文字的数据进行提取、处理
,进而生成能够被单片机直接读取的显示数据
一、 软件需求
1、 图片处理
打开的指定路径.bmp格式的位图文件,对于过大的图片,做自动的切割处理;
重复打开以最近一次打开的图片为输出;
在不需要图片时候,清除图片。
2、 文字处理
为输出图像的任意位置添加任意文字,并且可以设置字体,颜色;
删除不需要的文字。
3、 扫描设置
自定义扫描图片的指定圆形区域;
自定义扫描圆形区域的半径大小,以像素为单位。
4、 数据处理
设置显示的扫描方式,具体包括:单个半径而言有从内到外和从外到内两种方式
;对于一周扫描而言,有顺时针和逆时针两种方式;
设置灰度图片到单色图片转换的灰度阀值,范围是0-255;
对灰度图片或者单色图片提供数据反相功能;
导出灰度图片数据到.txt文本文件;
导出单色图片数据.txt文本文件;
发送灰度图片数据到串口/USB(选);
发送单色图片数据到串口/USB(选)。
5、 界面
操作界面简洁明快、易上手、低误操作;
提供图片的三种预览方式,包括原始图片、灰度图片、单色图片;
提供方便的旋转LED显示屏的扫描预览。
二、 软件功能设计
软件使用微软的VC++6.0作为开发环境,使用MFC的DialogBase作为程序框架
1、 图片处理
对于每次打开图片,对话框保存一个图片文件的文件位置,重新打开则修改该图
片地址,
删除图片即是将图片文件位置设置为空。
2、 文字处理
对话框保存一个由字符串信息的构成的链表,字符串信息包括字符串内容,字符
串显示位置,字体信息,字体颜色。每添加一个字符串,构造一个静态字符串信息对象,
并添加至链表中;
删除字符串则是将链表中的指定结点删除。
3、 扫描设置
对话框保存圆心坐标,扫描显示的半径;
通过设置圆心的坐标来确定扫描的圆形范围,设置方式有鼠标右键点选和直接输
入数据设置。
4、 扫描
首先输出未处理的原始图片和文字:检查图片路径字符串是否为空,如果不为空
,显示出图片,如果图片大小超过显示区域,就从左上角截取,隐藏多余的部分;遍历字
符串列表,根据字符串信息,输出每个字符串;
接着遍历扫描圆形上的所有像素,为了提高程序的运行效率,这里需要避免对每
一个角度上的所有像素求三角函数,取而代之是用加减法:
假设半径相对0度的角度是θ,则该半径上相邻两个像素之间的之间的距离的X方向偏移量
dx=cosθ、Y方向偏移量dy=sinθ。这样只需要从原点累加X和Y偏移量或者从半径切点累减
偏移量,就可以很高效的遍历圆形区域的所有点。
根据设置的圆心,半径,确定一个圆的范围,确定以圆形的0度作为起点,整个圆形为360
度,则每次扫描角度的分量dθ=360/周长=360/(半径*2*圆周率);
对于半径不同的扫描方式(外->内/内->外),对于外->内的半径扫描方式,采取从
半径切线递减(dx,dy);对于内->外的半径扫描方式,采取从圆心递加(dx,dy)的扫描方式;
对于不同的圆周扫描方式(顺时针逆时针),采取角度的分量dθ递加(逆时针)或者递减
(逆时针)的扫描方式;
根据屏幕上的显示效果,结合扫描方式,对选定的圆形区域的所有像素进行遍历
并提取出颜色,这里使用CDC类的GetPixel函数直接获取屏幕上输出点颜色信息;取得指定
点的颜色值之后,分离出R、G、B值,通过公式:
灰度gray=0.299*R+0.587*G+0.114*B
计算出灰度数据,最后将灰度数据以数组的形式存放在对话框中。
5、 亮度校正
由于旋转LED显示屏的机械结构,其亮度从圆心到边缘总是呈现像素亮度不均匀的
现象——越靠近中心点的像素越亮;因此需要在软件上采取算法,控制不同位置像素的亮
度。靠近中心像素,其亮度高的原因是对同一个像素点进行了多次扫描,这样就会导致中
心像素在单个扫描周期之内的点亮时间比例比外围像素要高,所以,在算法上,需要去掉
重复读取,保证一个像素只被扫描一次,也只点亮一次。程序记录之前扫描的点的坐标,
紧接着的扫描就不需要在对已经扫描的像素进行扫描,并以255(熄灭发光二极管)填充该
像素,使发光二极管熄灭;
6、 数据处理
灰度图片转单色图片,设置一个阀值(0-255),对于大于该阀值的灰度点置1,否
则置0;
灰度图片到单色图片转换的灰度阀值作为一个成员变量,保存在对话框中,并关
联编辑框;
数据反相直接使用C++的位操作符号取反;
灰度图片数据的导出:用户输入导出文件位置和文件名,对图片重新进行一次扫
描并生成灰度数据,再将灰度数据写入文本文件,导出数据格式按照每个半径一行,每个
像素作为一个字节(8位深度)以十六进制方式显示,数据格式例子(五个像
素):0xff,0xff,0xff,0xff,0xff,0xff,……;
单色图片数据的导出:用户输入导出文件位置和文件名,对图片重新进行一次扫
描并生成灰度数据,将灰度数据转换成单色图片的数据,并且将单色数据压缩(每个字节存
放8个像素的信息),再将压缩后的单色图片数据写入文本文件,导出数据格式按半径一行
,每8个像素作为一个字节,并以十六进制显示,数据格式例(40个像素):”
0xff,0xff,0xff,0xff,0xff,”。
7、图片预览
在对话框上设置两个矩形区域,左下角矩形区域:大小400*260,用于显示原始位
图和标识出选择的圆形区域;右下角矩形区域:大小400*260,用于仿真出硬件显示效果。
8、 界面
直接使用VC++6.0的MFC对话框的程序向导,按照控件功能分类,合理放置控件、
合理命名控件ID。
三、运行效果
经过不断开发和改进,该旋转LED取模软件能够满足需求,并且具有比较好的可用
性和稳定性。运行结果如下图
|