动态显示

关键词: 字典 元素 显示 态势

动态显示(精选十篇)

动态显示 篇1

目前的LCD(液晶显示器)所用的背光源大部分是CCFL背光源。在整个工作期间内CCFL背光源始终满负荷工作,电能消耗很大,占整机电能消耗的60%以上[1]。由于背光源始终全亮,每支灯管的亮度和功耗基本相同,不能随视频信号改变亮度和颜色,而LCD又不能将不需要的光线完全关闭,因此造成图像对比度下降,色饱和度下降。为了解决这一问题,我们采用LED作为背光源,并且分区域动态控制背光源。这种动态的LED背光源根据分区的图像动态调整LED的亮度,即在图像亮的地方,背光源亮;在图像暗的地方,背光源暗[2,3]。

常见的区域动态背光算法有平均值法、最大值法和CDF阈值法[4]。平均值算法是以每个区域灰度的平均值作为背光亮度。该方法拥有较低的功耗和较高的对比度,但图像会出现较严重的失真[5]。最大值算法取对应区域内所有像素点中最大的灰度值作为背光亮度。这种算法能够保持图像的大部分细节,画面品质高,但是功耗过大同时对高亮度图像来说几乎每个区域都可能找到255这个最大的灰度值,这与传统的背光区别不大[6]。

CDF阈值法是介于平均值和最大值法之间的一种算法,该算法功耗在平均值法和最大值值法之间同时图像质量较高。缺点是对暗景图像失真较严重,这是因为暗图像的灰度值小的像素占的比例大,CDF曲线上升快,K=0.9所对应的灰度值很小,不能满足暗区中灰度值大的像素对背光亮度的要求。

鉴于CDF阈值法,本文也提出了一种介于平均值法和最大值法之间的算法,该算法对各种类型的图像都有较好的处理效果。

1 基于动态阈值背光亮度提取算法

1.1 RGB图像转为灰度图像

为了避免补偿过程中过多像素超过8 bits而出现削幅失真[7],我们以图像[i,j]点像素三个分量的最大值作为该点的灰度值,定义RGB图像转灰度图像公式为

1.2 背光提取步骤

1)背光公式

当图像的细节很多,用平均值法就可获得较好的画面质量;当图像细节较少,就需要最大值法才能得到好的画面。由此,我们定义背光亮度提取公式:

其中:IBL是背光亮度;Iave和Imax分别表示区域(m,n)通过平均值法和最大值法得到的背光亮度。当区域细节多,K值趋于1,背光亮度接近平均值亮度;当区域细节少,K值趋于0,背光亮度接近最大值获得的亮度。根据每个区域细节的多少,动态的调整K值,可满足不同区域对亮度的不同要求,既节省功耗又满足画面质量的要求。

2)计算阈值

最大类方差法是一种自适应的阈值确定方法,又叫大津法(OTSU)。它是按图像的灰度特性将图像分成背景和目标(细节)两部分。背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大。当部分目标错分为背景或者部分背景错分为目标都会导致两部分的差别变小。因此,使类间方差最大的分割意味着错分的概率最小。本文采用阈值二分法得到使类间方差最大的阈值T,其公式如下:

式中:属于细节的像素点数占整幅图像的比例记为w0,平均灰度记为u0;属于背景的像素点数占整幅图像的比例为w1,平均灰度记为u1;类间方差记为g;图像大小为M×N;图像中灰度值小于阈值T的像素点个数记为N0,大于T的像素点个数记为N1。

3)计算区域背光亮度变化系数

得到类间方差最大时的阈值T后,我们用该阈值对图像进行二值化。统计二值图像单一区域中像素值为1的点数目,记为M1;像素值为0的点数目,记为M0。则背光亮度变化系数

1.3 液晶补偿

仅降低背光亮度,而液晶驱动信号没有做相应补偿调整,会造成图像细节画面亮度的失真[8],如图1所示。

由图1可以看出:单纯只作背光调整的系统所产生的背光调制图会有明显偏暗的现象。而有液晶信号补偿的系统不但有高对比度的效果,并可保持大部分的图片细节,所以液晶补偿动态背光控制方法中是必要的。

在液晶补偿信号中,背光源的光强分布是液晶补偿的依据。首先,根据模糊-掩膜(BMA)[9]的方法模拟真实背光强度分布情形,再以此作为液晶补偿前的光强分布,由式(6)推算液晶补偿信号[10]。

此公式在液晶显示器校正的条件下,其中IFull表示背光全亮时的背光强度,IHDR表示动态调整背光的背光强度,根据此公式,由原本的液晶亮度级数GTarget,推出补偿后的液晶亮度级数GHDR。

2 仿真结果

背光亮度区域调光后,功耗降低了,但会带来图像的失真。图像质量评价有峰值信噪比(PSNR)和溢出失真率来表示。

2.1 峰值信噪比[11]

峰值信噪比是最广泛使用的评价图像质量客观标准,通过原始图像与失真图像的差值计算得到的,设原始图像和处理后的图像,则RPSNR定义

bm在此等于255,RPSNR评价方法大致与人眼的视觉品质一致,一般RPSNR大于38的图像就可以说是属于高保真图像,30以上的图像的保真度也很高,人眼几乎看不出失真来[12]。

2.2 溢出失真率

为了使最后液晶屏显示的图像能够尽可能还原,进行区域亮度调整后需要进行像素补偿步骤,由于液晶显示器输入图像的大小为8 bits,而进行液晶补偿的时候,经式(6)计算后可能出现像素亮度级数超过255被限制在255的情况,此时图像产生失真。定义图像溢出失真率为计算像素补偿后的超出8 bits的像素RGB分量个数Nex255与整幅图像总的RGB分量个数Ntol的比值,公式表示为

2.3 仿真结果

采用本文提出算法进行计算机仿真,基本能够将图像失真控制在人眼难以识别的范围内,同时降低了功耗。图3和图4分别是对图2中的nvhai、shanhua两幅图像采用最大值算法、平均值算法、CDF阈值算法及本文提出算法在MATLAB中模拟得到的背光图及其对应的经液晶补偿后的显示图。表1是各种算法在相同条件下的功耗、失真率、PSNR及算法运行时间的仿真结果。

(a)Nvhai.jpg;(b)Shanhua.jpg.

本文的实验结果是在MATLAB7.1,CPU主频1.86 GHz、1.87 GHz,内存为1 G的双核笔记本电脑中模拟得到。根据模糊-掩膜(BMA)的方法模拟背光强度分布,如图3和图4。

表1和表2是几种评价算法好坏的指标

动态背光调整中,图像的溢出失真率和功耗之间是相互矛盾的,溢出失真率会随着功耗的降低而增大。研究动态背光调整算法目的是为了在功耗和溢出失真之间找到一个平衡点,确保图像品质的情况下尽可能降低功耗。

(a)平均值算法;(b)最大值算法;(c)CDF阈值算法;(d)本文提出算法

(a)The average method;(b)The maximum method;(c)The threshold of CDF;(d)The proposed method

(a)平均值算法;(b)最大值算法;(c)CDF阈值算法;(d)本文提出算法

(a)The average method;(b)The maximum method;(c)The threshold of CDF;(d)The proposed method

综合图3、图4、表1和表2可知:平均值算法失真过大,最大值算法功耗偏高,CDF阈值算法动态阈值算法在平衡功耗和失真之间做的比较好。但从图3可以明显看出,CDF阈值算法在处理nvhai这类暗景图像时,存在较为明显的细节失真,尽管其溢出失真率和本文所述的动态阈值算法差不多。这是因为溢出失真率计算的是背光补偿超过8 bits的像素点个数,但是无法确定这些溢出的像素点的位置。显然,对nvhai这幅图像,CDF阈值算法在星星这些细节处溢出的像素点数过多,从而导致背光调制图中的小星星一眼可见的失真。

本文提出动态阈值算法,细节考虑的主要因素,因而本文算法优势在于:无论碰到的是哪种类型的视频图像,都不会出现明显失真的情况。从算法运行所需时间来看,本文算法的运行时间比平均值算法和最大值算法稍大,但是远小于CDF阈值算法

3 结论

为了降低液晶功耗的同时能够保证图像的质量,提出一种基于动态阈值的LED区域动态背光调制算法。运用该算法对背光进行调整后,根据得到的背光亮度,对其液晶补偿后,输出的图像失真率控制在人眼难以识别的范围内。仿真实验表明,本文提出算法能够有效的保持图像细节,图像失真不明显,降低了功耗。

参考文献

[1]Kang S J,Kim Y H.Image integrity-based gray-level error control for low power liquid crystal displays[J].IEEE Transaction on Consumer Electronics(S0098-3063),2009,55(4):2401-2406.

[2]Seetzen H,Lorne A Whitehead,Greg Ward.A High Dynamic Range Display Using Low and High Resolution Modulators[J].SID'03Digest(S2168-0159),2003,34(1):1450-1453.

[3]Oh E Y,Baik S H,Sohn M H,et al.IPS-mode dynamic LCD-TV realization with low black luminance and high contrast by adaptive dynamic image control technology[J].SID'05(S2168-0159),2005,13(3):215-219.

[4]刘艳中.基于图像CDF阈值的LCD-TV动态背光主亮度提取算法硬件实现[J].液晶与显示,2010,25(3):449-453.LIU Yanzhong.Dynamic Backlight Signal Extraction Algorithm Based on Threshold of Image CDF for LCD-TV and its Hardware Implementation[J].Chinese Journal of Liquid Crystals and Displays,2010,25(3):449-453.

[5]章小兵,刘欣.基于PSNR的LCD区域动态背光调节方法[J].光电工程,2012,39(8):130-134.ZHANG Xiaobing,LIU Xin.A Control Algorithm of LCD Dynamic Backlight Based on PSNR[J].Opto-Electronic Engineering,2012,39(8):130-134.

[6]Chih-Chang Lai,Ching-Chih Tsai.Backlight power reduction and image contrast enhancement using adaptive dimming for global backlight application[J].IEEE Transaction on Consumer Electronics(S0098-3063),2008,54(2):669-674.

[7]Chen Han-feng,Sung Junho,Ha Taehyeun,et al.Locally pixel-compensated backlight dimming on LED-backlight LCD TV[J].Journal of SID(S1071-0922),2007,15(12):981-988.

[8]李福文.基于LED背光源区域控制的高动态范围液晶显示技术进展[J].光学技术,2009,35(6):835-839.LI Fuwen.Progress of high dynamic range liquid crystal display based on LED backlight with area control technology[J].Optical Technique,2009,35(6):835-839.

[9]Liao L Y,Lin F C,Huang Y P,et al.A Real-time Liquid Crystal Signal Compensation Method for High Dynamic Range LCD[J].IDW'07(S2168-0159),2007,14:1433-1434.

[10]Louis Kerofsky,Scott Daly.Distinguished paper:Brightness Preservation for LCD Backlight Reduction[J].Journal of SID(S1071-0922),2006,26(2):1242-1245.

计控实验报告LED动态显示 篇2

主要教学目标:

掌握LED动态显示的方法。

教学的方法及教学手段:讲授法,讨论法,练习法,实验法 教学重点及难点:LED动态显示 实验内容

1.LED用动态显示123456;

2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。

(一)作法

微型机定时地对显示器件扫描

显示器件分时工作,每次只能有一个器件显示。1.LED用动态显示123456;

2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。

(二)1、8155 的PA口输出显示码,PB口用来输出位选码。2、74LS07为 6 位驱动器,为LED提供一定的驱动电流 3、8155的PB口经75452缓冲器/驱动器反向后,作为位控信号。4、75452内部包括两个缓冲器/驱动器,它们各有两个输入端。

(三)显示原理 1、8155初始化,建立显示缓冲区为 DISBUF, 存放待显示数据。

2、用软件译码法求出待显示的数对应的七段显示码,由PA口输出,并经过74LS07驱动后送到各显示器

3、由PB口输出位选码。各位从左至右依次显示,每个数码管显示1ms。显示完最后一位数后,再重复上述过程,(四)电路

(五)参考程序 #include #include #include #define uint unsigned int #define uchar unsigned char /*8155控制字和PA,PB口地址定义*/ #define CON_8155 XBYTE[0x7F00] #define PA_8155 XBYTE[0x7F01] #define PB_8155 XBYTE[0x7F02] //数码管字型定义 uchar LEDDATA[]={

0x3F,/*0*/

0x06, /*1*/

0x5B, /*2*/

0x4F, /*3*/

0x66, /*4*/

0x6D, /*5*/

0x7D, /*6*/

0x07, /*7*/

0x7F, /*8*/

0x6F, /*9*/

0x77, /*A*/

0x7C, /*b*/

0x39,/*C*/

0x5E,0x79,0x71,};

/*d*/ /*E*/ /*F*/ //动态扫描时间间隔50ms标志位 bit g_delay50ms = 0;//函数原型声明 void Delay1ms(void);void Delay50ms(void);void main(){

uchar i, selectLED;IT0 = 1;EX0 = 1;EA = 1;CON_8155 = 0x03;selectLED = 0x20;while(1){

for(i=1;i<7;i++){

PA_8155 = LEDDATA[i];PB_8155 = selectLED;

//从8155 A口输出显示码

//PA口、PB口基本输入输出 //LED位选,从左到右扫描

//外部中断0,边沿触发

//从8155 B口输出位选码 //准备显示下一位 selectLED = _cror_(selectLED, 1);if(selectLED == 0x80){ }

if(g_delay50ms){ } else { } PB_8155=0x00;

//消隐 Delay1ms();

Delay50ms();

selectLED = 0x20;

//动态扫描时间间隔50ms

//动态扫描时间间隔1ms

} } }

void Int0(void)interrupt 0 { } void Delay1ms(void){ uchar i, j, k;for(j=142;j>0;j--)

for(i=1;i>0;i--)

} void Delay50ms(void){

unsigned char a,b;

for(b=173;b>0;b--)

for(a=143;a>0;a--);}

制作LED动态显示屏 篇3

在下面的内容中,我们将使用After Effects软件内置的Particle Playground(粒子运动)滤镜来制作一个动态的LED显示屏特效。

在我们的案例开始之前,先来介绍一下Particle Playground滤镜的参数,因为只有熟悉参数,我们才能根据制作效果的需要,熟练组合操作这些参数,图2显示了Particle Playground滤镜的参数

Grid(栅格)粒子是在交叉网格中创建出连续的粒子阵列,粒子的运动完全取决于Gravity(重力)、Repel(排斥)、Wall(墙)和Layer Map(图层映射)选项组中的参数设置。在一般情况下,Gravity属性都处于开启状态,所以默认状态下的Grid粒子是在网格上从上向下运动的,图4显示的是使用Grid粒子制作的粒子文字效果。

Cannon(发射)粒子可以在图层指定的点中创建粒子流效果,如图3所示。Cannon(发射)粒子是系统默认的粒子,其发射器是一个点。

Layer Exploder(图层爆炸)和Particle Exploder(粒子爆炸)选项组中的参数可以从已存在的图层或粒子中创建出新的粒子,如图5所示。

在默认情况下,Cannon粒子、Grid粒子、Layer Exploder和Particle Exploder所产生的粒子都是圆点粒子,但是Layer Map(图层映射)属性可以使用合成中的图层来替代圆点粒子。比如在合成中有一个鱼游动的图层,那么就可以利用Layer Map替代图层中的圆点粒子来制作出鱼群游动的动画,如图6所示。

通过Gravity属性可以设定重力场,从而影响粒子的运动方向。粒子在重力场的作用下进行加速运动,可以用来模拟雨、雪以及香槟泡沫的上升动画效果。

通过设置Repel(排斥)参数,可以决定粒子在指定范围内是产生相互吸引还是产生相互排斥的效果。

Wall(墙)属性主要用来设置粒子所受到的障碍,当粒子撞击到障碍物时会发生反弹现象。

Persistent/Ephemeral Property Mapper(持续/短暂特性映射)这两个属性是通过为粒子图层设置Layer Map来为粒子制作特殊的属性变化效果,用户不能直接对粒子进行这种操作,但是可以通过Layer Map指定的像素来使粒子发生变化。

LED显示屏特效

接下来,我们就可以使用Particle Playground滤镜来制作动态的LED显示屏特效了。

(1)按Ctrl+N组合键新建一个名称为“点阵文字”的合成,具体参数设置如图7所示。

(2)按Ctrl+Y组合键新建一个尺寸与合成大小相同的黑色固态层,并将其命名为“屏幕”,然后为其添加一个Particle Playground滤镜,接着在Grid选项组中为Width(宽度)属性添加表达式width,为Height(高度)属性添加表达式height,最后在第0∶00∶00∶00秒时间位置设置Particles Across(粒子交叉关键帧数值为100,Particles Down(粒子下降)关键帧数值为40;在第0∶00∶00∶01秒时间位置设置Particles Across(粒子交叉)和Particles Down(粒子下降)关键帧数值为0,具体参数设置如图8所示。

(3)预览动画,可以发现粒子因为受到重力的影响而不断下落,因此需要设置Gravity选项组中的Force(力)为0,如图9所示。

(4)按Ctrl+N组合键新建一个名称为“粒子”的合成,具体参数设置如图10所示。

(5)在“粒子”合成中创建一个尺寸与合成大小相同的棕黑色固态层,然后双击工具栏中的“椭圆工具”按钮,为固态层添加一个圆形遮罩,接着设置Mask Expansion(遮罩扩展)为-2,如图11所示。

(6)将“粒子”合成拖曳到“点阵文字”合成中,然后关闭“粒子”图层的显示开关,接着展开“屏幕”图层的Particle Playground滤镜中的Layer Map(图层映射)选项组,并设置Use Layer(使用图层)为“粒子”图层,如图12所示。

(7)复制一个“屏幕”图层,并将其更名为“文字显示”,然后将其放置在最上层,接着为其添加一个Tint(染色)滤镜,具体参数设置如图13所示。

(8)为“文字显示”图层添加一个Glow(辉光)滤镜,具体参数设置如图14所示。

(9)按Ctrl+N组合键新建一个名称为“文字”的合成,具体参数设置如图15所示。

(10)在“文字”合成中创建一个白色固态层,然后在“合成”预览窗口中输入英文Welcome,接着在第0∶00∶00∶00秒时间位置设置Position(位置关键帧数值为(662,211),在第0∶00∶00∶09秒时间位置设置Position关键帧数值为(12,211),在第0∶00∶02∶16秒时间位置设置Position关键帧数值为(12,211),在第0∶00∶03∶00秒时间位置设置Position关键帧数值为(-619,211),如图16所示。

(11)将“文字”合成拖曳到“点阵粒子”合成中,并关闭文字”图层的显示开关。

(12)选择“文字显示”图层,然后在Persistent Property Mapper(持续特性映射)选项组中设置Use Layer As Map(使用图层为映射)为“文字”图层,具体参数设置如图17所示。

动态显示 篇4

本实验所用芯片为ALTERA公司开发的EP1C6Q240C8芯片,cyclone系列,具有240个引脚,工作时最多可同时处理10路控制信号,工作电压为1.4V~3.6V。

液晶屏为12864,显示类型STN,点阵格式128 x 64,点尺寸0.48 x 0.48mm。

软件编程环境:Altera的Quartus II。

2 焊接板子,原理图如下

左侧为EP1C6Q240C8芯片:共有240个引脚,相当于把4块芯片联系在一起,备选的引脚比较多。右侧为液晶屏引脚,本液晶屏内置汉字库(通过查汉字编码库,得到代码)。

3 静态显示的设计

3.1 给data_buffer赋内容

constant data_buf2与constant data_buf3所赋值均为x"20",由图片可知,后两行并未输出内容。x"20"代表空格,即此处不输入内容。也可根据需要,通过查汉字编码表输入内容

3.2 分频部分

3.3 把汉字加到液晶地址

同理将"FPGA"送到第一行(地址为80),第三行和第四行也可根据需要加入相关汉字。

3.4 引脚的配置

4 动态程序的显示部分

因为是动态显示所以拍摄的不够清晰。

大部分程序与静态类似,下面只列出不相同的部分[竖行显示]。

4.1 分频

process(clk)//此处是分频,结果是5 000Hz,此部非常重要,我们后面显示用到clk_5000,动态显示效果,就是靠这个频率。

variable cnttemp:integer range 0 to 9999;

具体可参照静态显示的分频,只需将原来的clk_100k改为clk_5000即可,每幅间隔是

1/5000=200us。假如频率设的过高,则汉字一扫而过,无法观看到清晰图像。

4.2 显示

动态显示与静态显示不同之处为:

静态显示只需进行一次初始化,分别在四行上显示出字符或汉字。

动态显示的原理是:第一次将汉字送到第一行,之后擦去内容,第二次送到第二行,擦去内容,依次进行直到第四行,之后再跳到第一行。给人眼的感觉是汉字在不停的移动。所以每屏显示之前都要进行初始化(相当于擦去上一幅的内容),故在每行显示之前都要加上类似s0,s1的初始化信息。

例如s0->s1->s2(第一行确定地址80)->s3(送入显示内容)>s4(代码s0一样)->s5(代码与s1一样)->s6(第二行确定地址90)->s7(送入显示内容)->s8(代码s0一样)->s9->(代码与s1一样)s10(第三行确定地址88)->s11(送入显示内容)->s12(代码s0一样)->s13(代码与s1一样)->s14(第四行确定地址98)->s15(送入显示内容)->s0最后再跳到s0,循环显示。

参考文献

[1]罗朝霞,高书莉.CPLD/FPGA设计及应用[M].人民邮电出版社,2007.

动态显示 篇5

摘要介绍一种基于专用的语音识别芯片HM,应用 于地铁车厢内乘车站名动态显示系统,在车辆不作任何改动的基础上实现车厢内广播报站与站名显示器的同步。

关键词:语音识别 地铁车厢广播 车站名动态显示

1. 概述

2. HM2007的性能特点

其中: MIC IN为语音输入

DATA OUT为数据输出

HM2007的技术参数:工作电压4----5.5V,工作电流1.5mA,工作温度 -20-----+70度,正常的语音输入电压:20mV。

3. 设计和应用

项目主要针对目前上海地铁列车在车厢内无LED动态站名显示而设计,通过将列车车厢广播模拟信号转换成数字信号,自动控制LED发光二极管,使得广播内容(每个车站站名)与发光二极管显示面板声光同步,将显示面板放置地铁车辆的每扇车门上方,并且显示面板以地铁运营线路为背景,列车进站和出站时能分别指示,让乘客非常直观地、一目了然地随时了解车辆在运行时自己所乘的位置,从而方便乘客的上下车,提高地铁服务水平。在国外的地铁列车上应用已相当普遍。

通过对语音模板多次试验和分析,发现按图一所设计的语音识别芯片及附件组成的电路在实际生活的应用中,其识别效果不够理想,因为人的发音随人的身体状况和周围的环境变化,其前后的发音有一定的区别,故在模型匹配上有一定难度。所以在家庭、玩具、通信和工业自动控制领域,难以推广的主要原因。然而应用在本项目中,其效果特别好,通过增加特殊的硬件电路设计成的样品,经试验识别率高达到100%左右。因为地铁车厢内的广播内容具有 规律 性,内容和音量具有恒定不变的特点。

LED站名显示用HM2007语言识别芯片和特殊电路设计而成,具有独特性和创造性,能达到简单的语言识别,语音识别显示器的`输入端间接地与车载广播功放器相连接(采用变压器或光电结合器),实施广播模拟信号发出的语音进行车站名的自动识别。区别以前所设计的利用交流载波原理控制LED显示、复杂的编程技术等方法。

(1)输入控制部分: 通过结合器连接,如图二所示,要求模拟语音输入A点的电压必须控制在大约20mv左右,以确保后期语音识别的正确性。在输入电路增加了RC微分电路和延时电路,即将模拟信号转变成数字方波信号,对语音输入进行开关量的控制确保在 T<0.9秒内的正确输入语音字长。图中K为微型继电器。(3)噪音滤波部分: 功能是自动识别(阻挡)无用的语音,例如:司机的讲话及杂音等,确保输入语音的可靠性、稳定性,因为 目前 地铁车辆广播报站内容在车站与车站之间(区间)有二次广播。在建立模型时,我们将第一次的广播语音内容放在第77地址内,第二次的广播语音内容放在第01到40之间的地址内(如果车站有40个),而我们只要识别其中第二次的一段语音,如:“衡山路车站到了,乘客可以下车······”,就是“衡山路”三个字长度。为了能滤波55、66、77地址号码,(其中:55、66在实际使用中不会产生)正确显示01到40之间地址内的内容,特采用C031与门和UM3758串行编译器进行滤波电路。如图四:

(4)执行显示部分: 将车厢广播喇叭的模拟信息通过语音识别器转变成数字信息,最终经过译码电路、多路数据选择器CD4514及RS485接口,去控制车厢内车门上十个LED显示面板。在进行广播内容更改时,本项目最大的特点是:不需要任何手段的手工软件编程的修改,而是通过远程电路控制技术进行按顺序自动录音地址和内容。如图五:利用滤波电路和脉冲键控多谐荡器电路实现远程集中输入录音功能。远程输入电路由与门电路、RC微分电路、延时电路和编码电路组成,输入IN来自与门电路C031的控制线,输出OUT到键盘3*4,模拟二次地址编码号码的输入,达到自动录音功能。

4. 结论

语音识别器及LED显示面板的样品设计和初试,符合设计要求,完全能 应用 到以前没有LED显示面功能的地铁车辆上,与其他所设计方式相比较,如:无线RF、红外线和磁性控制,语音识别控制简单、可靠性好、安装方便、相对投资最小和不改动车厢内任何电器,仅提供110VDC和音频接口线。其缺点:一但音频线路发生故障,既语音识别器就无法工作。

项目的开发具有一定 社会 效益,能得到国内外乘客、残疾人员的欢迎提高地铁服务质量

参考 文献 :

1. HUALON MICRELECTRONICS CORPORATION TIWAN PRODUCT NUMBER: HM2007

指控态势显示属性动态配置方法研究 篇6

关键词:态势显示,数据字典,软件设计模式,国产操作系统

0引言

控系统中的态势显示软件指挥控制系统信息处理结果与决策支持内容以图形视图和表页视图的方式展现给指挥员,即以点、线、面、军标、文字和表格的形式,即时绘制并显示在计算机屏幕上,实时反映战场的动态变化,同时又能接收指挥员的指挥意图,进行解算后展示干预结果。

态势显示软件人机交互的重要部分,自然、实用、观和高效是对态势显示软件基本要求。每个指挥操作员由于个人习惯等因素对态势显示中各类显示元素的显示属性要求各不相同,具有很大的差异性。目前态势显示所有显示图元的显示属性采用两种方法进行设置:(1)程序编写时在程序中进行设置。当指挥提出对态势中重要图形显示的外观和颜色提出修改时,需要开发人员进行程序的修改和编译,该方法比较繁琐。(2)通过事先配置好的文件,将各种类型显示图元的显示属性在文件中事先设置。在界面启 动时,进行读取;在态势绘 制时,按照配置文件事先设置的显示属性对图形进行显示。这种方法无需开发人员对程序进行修改,指挥员可直接修改配置文件,但每次修改后需要重新启动界面读取配置文件,指挥员必须非常熟悉配置文件的格式及各元素的含义,而且在界面运行时无法实时更新和改变其显示属性。

本文结合实际应用,对指控态势图形显示元素进行分析归纳,提出了对态势图形显示元素建立数据字典的方法,构建属性编辑器。通过对属性编辑器的操作,使指控态势图形显示的属性可实时设置,并基于观察设计模式,在国产操作系统环境下,采用Qt开发工具进行实现。

1对指控态势显示属性的分析

控系统态势显示主要有三个方面的功能:

(1)接收外部信息,转换为界面显示信息,以图形、列表等形式展现给指挥员;

(2)接收指挥员的界面干预操作,改变界面显示信息,或者将信息转换并进行发送;

(3)指挥员制作有关信息,将信息转换并进行发送。

围绕这三个方面,指控系统态势图形显示信息可分为四类,即地理信息显示、战场部署动态目标和战术方案线[1]。

1.1地理信息显示

读取MapInfo(美国MapInfo公司的桌面地理信息系统软件)的通用数 据交换格 式MID文件和MIF文件。MID文件主要保存空间数据的属性信息,按空间数据的类型可以分为湖泊、边境线、河流和城市等;MIF文件保存图形数 据,由文件头 和数据段组成,数据段包 含MapInfo中图形对 象实体,将这些实体读入内存,存入链表结构中,根据不同的数据类型,在背景层 中按定义 的点、线、多边形、圆弧、文本、矩 形、圆角矩形 和椭圆绘 制不同的 图形。数字地图的绘制可以分为几大类型:国境线、河流、城市、高速公路和铁路等。

1.2战场部署

战场部署是将机场、雷达站、地空导弹、航路航线、作战责任区等信息从数据库中下载到本地席位或直接读取内部定义的文件,以军标形式显示在地图背景上,其图形和位置相对固定,很少发生变化,其外观属性包括颜色、线型等,可以表示战术方面的含义,如等级、国别等信息。

1.3动态目标

动态目标一般指飞机、舰船、车辆等。在指控系统态势显示中,动态目标的数据量巨大,目标移动迅速。随着雷达性能提高,其更新速率也不断提高动态目标是指控系统态势显示的重点,也是指挥员最为关心的目标。动态目标在态势图中的显示如图1所示。

每一个动态目标由历史点、航迹圈、飞机类型标识符、标牌、标牌引线和速度矢量线组成,通过实时更新当前最新点位置,完成动态目标的更新。

动态目标显示的关键是解决好信息显示直观、明确、及时和快捷的问题。以不同形状的图标代表目标识别不同的机型(大型机、战斗机、气球等)。根据动态目标的颜 色可以区 分敌、我、友、不明属 性。以速度矢量线的长短区分目标飞行的方向速度的大小,航迹圈是以本目标的最新点位置作为圆心,以一定安全距离作为半径。根据动目标显示的内容,将动目标显示的信息进行分解,可以划分为目标的颜色、目标的图标类型、目标标牌字体大小和字体等内容

1.4战术方案线

战术方案线是战术应用软件按事先设定好的进攻方案或按指挥员的意图,实时计算出战术方案线;按相关接口,实时通知态势显示软件,态势显示软件以图形方式直观显示战术方案线,如图2所示。

战术方案线采用动态实时更新,随着目标态势的变化而实时变化,由点、折线、圆弧、圆、文字等多种图形构成。

对战术方案线的显示属性进行归纳,发现其主要显示属性包含线型、线宽、字体、字体大小。战术方案线也可以是各战术应用实时制作的各种识别区域、告警区域、回传区域区域信息。

2态势显示属性编辑器的设计和实现

2.1态势图形显示元素字典

态势显示主要包括对地理信息、战场部署动态目标和战术方案的绘制,通过将战术含义转换为各类显示属性(线型、线宽、填充、颜色、字体大小等外观属性),绘制相应的点、线、面、军标和文字。将上述各类战术信息进行归纳和总结,例如,地理信息包括河流、湖泊、省界、地标 等;战场部署 包括我军 机场、敌军机场、雷达站、指 挥所等;动态目标 包括敌机、我机、舰船、潜艇等;战术方案包括上报区、截击线、责任区等。可以将上述战术信息的内容分成主类和子类,主类是固定的四个分类:地理信息、战场部署动态目标和战术方案。每种类型下可具体细分,明细类型有唯一的32位类型码与之对应,每种类型码对应有显示属性[2]。在态势图上显示的图元均注册一个类型码,通过类型码与显示属性对应,那么在态势图的每种图元中均对应一种显示属性。对显示属性提供设置界面,在态势图上显示的相关图元即可按设置的显示属性进行显示。

显示属性数据字 典具体示 例如表1所示。主类,用于记录信息类型所属主类型;键值,用于内部存贮信息类型;信息类型名称,在编辑器中显示,提供给指挥使用;颜色,对应采用的颜色值;符号,采用的符号;尺寸,指符号大小,单位是像素;线型,采用的线型;线宽,采用线的宽度;填充,绘制区域时填充类型,包括颜色和透明度。

显示属性数据字典以xml文件格式进行保存,也可以保存到数据库中。可以配置不同风格的显示属性数据字典文件,通过属性编辑器对不同显示风格的文件进行加载。每次界面启动时进行加载。态势图显示绘制各种图元时,根据每个图元注册的类型码检索显示属性进行显示[3]。提供界面对显示属性进行设置,实时通知显示图元,实现态势显示属性动态配置。

2.2态势显示属性编辑的界面设计

态势显示属性编辑器用于对态势图上显示元素的显示样式进行设置,主要包括对线条、文本、军标符号的设置。在 国产Linux操作系统 中,利用QtCreator图形界面开发工具,设计态势显示元素属性编辑器图形的用户界面[4],其表现形式如图3所示。

属性编辑器主要由三部分组成:显示元素编辑区、属性设置区和按钮区。

显示元素编辑区是由树状控件组成,最顶一级对应数据元素字典中的主类信息,包括地理信息、战场部署动态目标和战术方案。各主类信息下可进行再次细分,通过鼠标右 键菜单或 点击按钮 区“新建”按钮,弹出对话框,输入建立显示元素属性名和信息类型码,确认后,可将输入的属性名添加到选中的显示元素下层树中,每个显示元素均有唯一的信息类型码对应。

属性设置区由线条选择、字体选择、军标设置和军标选择组成。在实 际应用中 可根据态 势显示要求,添加显示属性,如填充区 的设置等。线 条的设置,包括对线条的线型、线宽和颜色的设置,可通过选择控件进行选取。字体设置,用于设置字体类型和大小,其中字体类型包括宋体、楷体、黑体,字号定义字体大小的一系列数字,字体的颜色可以通过颜色选取控件取消。军标的选取包括大小、线宽和军标对应的代码,军标大小定义是军标显示的宽度,单位是像素,军标线宽定义的是绘制军标笔的宽度,单位是像素,军标代码是根据国家标准定义代码数字,可以通过鼠标在军标选择区中拾取。

按钮区由“应用”、“新建”、“删除”和“取消”按钮组成,通过“新建”按钮,可以对显示元素编辑区进行添加显示元素,对在显示元素编辑区中选中的显示元素,通过对属性设置区的操作,设置显示元素的属性,点击“应用”按钮,可以将设置的显示元素属性进行保存入库,通过点击“删除”按钮,可以删除在显示元素树选中的显示元素。点击“取消”按钮,将设置的显示元素属性恢复到以前的状态。

将态势图形显 示元素字 典保存到 数据库中,在界面启动时进 行加载,操作员可 以随时通 过属性编辑器对态 势显示属 性进行设 置,并实时更 新态势的显示,可以将更 新后的态 势图形字 典进行保存,所有操作台在收到更新 消息后,态势图即 进行更新。

2.3观察设计模式的应用

设计模式是指在软件开发中,经过验证的、用于解决在特定环境下重复出现特定问题的解决方案设计模式是很多编程大师 的经验积 累和思想 的精华,针对一些典型的、有代表性的问题,设计模式提供了一些优秀的解决方案。每个模式由一组精心安排的类和对象构成,通过定制和实现,可用来解决软件设计中特定上下文的问题软件开发领域。合理地利用设计模式,软件开发人员可以简单方便但又快速有效地解决某些特定的问题,而不需要从头再来。使用设计模式能够大大提高软件系统的可扩展性和可维护性。

观察模式定义了一对多的依赖关系,让一个或多个观察对象关注一个主题对象,一个主题对象在状态发生变化时能够通知所有的依赖对象,使这些观察对象 能够自动 更新[5]。在属性编 辑器中,当更新修改了某类型的显示属性时,及时通知以该主类注册的显示图元,实时进行显示更新,如当修改了某类型航迹的显示颜色时,及时更新态势图上航迹的显示,如图4所示。

观察模式中,Subject是被观察 者 (即目标),它能够动态增加(Attach)或取消(Detach)观察者,当目标发生变化时,目标负责通知(Notify)所有的观察者。

当Observer观察者收到目标发来的更新消息时,进行更新操作(Update)。

航迹类(TrackObject)、地理信息类(BattleObject)、战场环境 类 (GeoObject)和图形类 (GraphicObject)是具体的观察者实现对象,接收通过属性编辑器对该类型具体设置的颜色、线型、线宽、字体、字体大小、图标更新的通知,并进行相应的处理,更新自身的显示。观察模式抽象观察者和目标之间的抽象耦合,能够很好地处理操作动态联动[6]。

3结束语

基于VTK的手术刀三维动态显示 篇7

神经外科疾病是一类发病率很高, 难以彻底根治的恶性疾病, 包括癫痫、帕金森病、脑肿瘤等。据统计, 我国神经外科类疾病患者达千万以上, 仅北京地坛医院, 每年进行的神经外科手术就达一万多次, 全国每年进行的神经外科手术达20万次。

神经外科手术导航系统是图像处理技术生物医学工程技术空间定位技术的产物。近十年来, 手术导航在临床手术等领域中的应用越来越广泛, 在提高手术可靠性, 减少手术风险等方面发挥了重要作用, 取得了巨大的进步。

本文基于脑神经外科导航系统项目, 对实际手术机器人模型进行研究, 对手术机器人的手术刀进行三维动态显示, 对于医生训练和医生在手术进行过程中的手术刀实时情况进行实时显示, 有助于医生把握手术的路径, 从而提高手术的成功率。

1 手术刀三维动态原理

脑神经外科手术机器人具有6个自由度, 要求三维动态显示时手术刀具有6个变换矩阵, 每一个矩阵对应一个自由度。基于这点, 下面对三维图形的变换矩阵进行简单介绍

1.1 三维图形变换矩阵

一般三维图形变换矩阵:

其中, (1) 、 (2) 、 (3) 、 (4) 为子矩阵, 他们的作用分别是: (1) 的作用是局部比例、对称、旋转、错切; (2) 用于平移; (3) 用于图形透视; (4) 的作用是整体放大与缩小。

1.2 基本三维图形坐标变换矩阵

1.2.1 平移变换

矩阵为, 变换之后各个轴的坐标为

1.2.2 比例变换

矩阵为, 变换之后各个轴的坐标为

1.2.3 旋转变换 (以逆时针旋转θ角为例)

绕x轴旋转:

矩阵为, 变换之后各个轴的坐标为

绕y轴旋转:

矩阵为, 变换之后各个轴的坐标为

绕z轴旋转:

矩阵为, 变换之后各个轴的坐标为

2 手术刀整体运动策略制定

脑神经外科手术训练系统的手术机器人具有6个自由度, 并可在三维空间内自由运动, 其精度可达0.5mm。它可以简便地完成脑手术过程中的基本动作。表1描述的是各个自由度的功能。

机器人设计图如图1, 实物图见图2。

另外, 手术刀整体运动涉及到整体运动参考点的选定、每个部件独立运动时参考点的选定、每个部件互相组合运动时的矩阵选择等问题。手术刀刀柄参考点定义为center_tail, 由“RefTail.stl”文件决定;整体运动参考点定义为center_all, 由“RefShell.stl”文件决定;手术刀轴向旋转参考点定义为center_Header, 由“RefHeader.stl”文件决定。各个参考点具体空间位置如图3所示。

最后, 各个参考点确定之后, 手术机器人6个自由度分别围绕这3个参考点进行运动, 包括平移和旋转。至此, 手术刀运动策略制定完成。

3 手术刀三维动态实现

根据三维模型的矩阵变换原理和手术刀运动策略, 在C#平台下, 利用VTK完成了手术刀具模型的导入以及与实际刀具的联动。

3.1 整体手术刀模型建立

整体手术刀模型是建立在手术机器人及其6个自由度的基础之上, 每个部件分别对应一个对象实例, 每个自由度对应一个矩阵变换。图4为整体模型的可视化管线。

3.2 动态手术刀具体实现 (以自由度6:手术刀刀柄张合为例)

动态手术刀建立在参考点和三维变换矩阵基础之上, 涉及到动态手术刀的平移矩阵和旋转矩阵。平移矩阵存储在现有的“.stl”文件当中, 而旋转矩阵则是建立在脑神经外科手术系统所需的旋转角度的基础之上。手术刀刀柄动态模型建立步骤如图5所示。

在Form窗口中添加slider控件, 通过slider控件的拖拉改变slider值, 从而实现手术刀刀柄张合的模拟动态。运行程序, 通过拖拉slider控件, 手术刀刀柄实现了张合的功能, 从而控制镊子的张合, 结果如图6所示。

3.3 手术刀其他自由度动态实现

依照“3.2”介绍的手术刀刀柄动态显示原理, 可以方便地实现其他自由度的动态三维显示, 通过slider控件可以实现手术动作模拟。图7-图11分别表示其他自由度的三维动态显示。

4 结语

本文介绍了基于VTK平台, 利用C#语言, 对脑神经手术导航系统中的手术刀进行三维显示的方法。可以发现利用VTK对手术刀进行三维显示具有以下优点:

一方面, VTK是开源的、免费的、易用的, 可以容易地生成自己的库, 可以用解释性语言编写程序;可以用Tk/Java的图形用户界面类库快速创建自己的图形用户界面, 具有不受约束的库平台, 大量的高级、有用的运算法则;软件系统具有完整性, 可以将数据转换成图像;另外, 它是面向对象的, 经过了现实世界应用程序的严格测试, 具有广阔的用户群体, 具有商业支持。

另一方面, C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#与C/C++具有极大的相似性, 简单易学, 因此容易被大众所接受。

最后, 本文基于VTK平台, 利用C#语言完成的手术机器人手术刀的显示方法, 很好地模拟了实际手术刀, 为未来基于手术机器人开发脑神经外科手术训练系统奠定了很好的软件基础。

摘要:针对脑神经外科手术中的手术刀模型进行了研究, 基于VTK平台, 对手术刀进行三维动态显示, 利用C#语言完成所有代码编写。该方法实现的动态三维重建显示功能强大、使用灵活, 具有步骤清晰简单、效果好、速度快等优点, 可以广泛应用于脑神经手术导航系统的三维重建中, 对脑神经外科导航系统的开发具有重要意义

关键词:脑神经外科手术导航系统,手术刀,VTK,三维动态显示

参考文献

[1]徐峰, 戢翰升, 汪林涛, 等.手术导航下显微手术切除脑型肺吸虫病灶的治疗体会 (附11例分析) [J].脑与神经疾病杂志, 2004, 12 (4) :305.

[2]顾力栩.脑外科手术导航系统中解剖图谱的三维可视化应用[J].中国图像图形学报:A辑, 2003, 8 (A) :805-808.

[3]张庆原, 李桂香, 张剑宁.神经外科导航辅助下邻近功能区脑胶质瘤的手术治疗[J].神经外科杂志, 2007, 20 (2) :97-99.

动态显示 篇8

OpenGL是SGI公司从其图形工作站上图形开发环境GL (Graphics Library) 拓展而来。因为其良好的可移植性和跨平台性, 逐渐成为高性能图形开发和交互式视景仿真的国际图形标准。OpenGL实际上是一个开放的三维图形软件包, 它独立于窗口系统和操作系统, 以OpenGL为基础开发的应用程序可以十分方便地在各种平台间移植。OpenGL可以与Visual C++紧密接口, 它使用简单, 效率较高。

1 系统设计

本系统主要是通过采集GPS、多通道测深仪 (16通道) 以及四角吃水仪、纵横倾斜仪的数据来实现对水下地形的监控。其中GPS信号、测深仪信号通过串口采集到PC机中, 四角吃水信号、纵横倾斜信号通过PLC网络采集。数据采集网络的总体结构如图1所示。其中PLC网络由一个PLC主站和三个PLC从站组成, PLC主站向下通过Profibus-DP与三个PLC从站进行数据交换, 向上通过MPI接口接到PC中的CP5611通信卡, 实现和上位PC机通信。

水深监控系统软件总体设计如图2所示。系统的软件开发主要分为以下几个模块:数据采集模块、数据处理模块、数据显示模块 (即根据数据进行三维水下地形显示) 、数据存储模块。

2 水深监控系统软件设计

2.1 数据采集软件设计

2.1.1 PLC与PC机数据通信

西门子公司的PRODAVE S7软件包的动态链接库 (DLL) 提供了大量的基于WindowsNT、Windows95/98、Windows3.11或MS-DOS的函数, 这样就使用户解决PLC与PC之间的数据交换和数据处理问题变为可能。利用PRODAVE S7提供的这些函数, 并且借助于PLC的多点接口模块, 就可以方便地在PLC与PC之间建立数据链接。开发工程师不需要掌握很多有关通信、总线方面的知识, 就可以进行PC机与PLC之间的数据通信

设计利用SIEMENS所提供的这几个DLL动态链接库, 应用VC实现PLC数据的读取。PLC与PC之间的数据交换用到的PRODAVE函数主要有: (1) load_tool PC机与PLC系统初始化链接; (2) unload_tool断开PC机与PLC系统链接; (3) d_field_read从PLC数据块读数据字节; (4) d_field_write给PLC数据块写数据字节; (5) db_read从PLC的DB块中读数据字; (6) db_write向PLC的DB块中写数据字; (7) new_ss激活上位机PC与PLC系统连接。

2.1.2 串行通信

本系统中GPS和测深仪与上位机采用的通讯方式均为串行通信。我们利用面向对象程序的实际方法, 将串口通信的功能封装到一个类中, 以后直接使用该类就可轻松实现串口通信功能, 同时结合Windows环境下的多任务并发机制, 采用多线程技术来实现串口动态实时通信, 使前端人机交互部分、中间处理部分和后台的串口操作部分并行处理, 让耗时的I/O操作在后台运行, 有效地解决了在串口通信中的实时响应问题。

2.2 数据处理模块设计

首先把GPS采集数据和测深仪采集数据分解成系统需要的数据格式, 接着对采集得到的数据进行处理, 得到系统所需要的数据。数据处理主要包括GPS坐标的转换以及数据网格形成用到数据的提取。

2.3 数据存储模块设计

在水深监视系统中, 将对大量的信息 (包括水下地形信息, GPS定位信息等) 进行组织、管理、查询、调用。因此, 本系统采用数据库技术对这些信息进行管理。系统中主要采用Access建立通用数据库, 在ACCESS数据库中创建了三张表, 分别记录GPS1数据、GPS2数据和水深数据。

接着在WinNT环境下用VisualC++6.0利用ODBC对数据库编程, 主要是对表内容的添加。主要操作包括:建立并登录ODBC数据源、在VC中建立连接记录集、添加记录集。

2.4 数据显示模块设计

数据显示模块 (即根据数据进行三维水下地形显示) 采用三维图形开发工具OpenGL来开发。OpenGL是SGI公司从其图形工作站上图形开发环境GL (GraphicsLibrary) 拓展而来。OpenGL实际上是一种图形与硬件无关的接口, 它包括了100多个重要的函数, 开发者可以用这些函数来建立三维模型和进行三维实时交互

地形图是采用DEM (即数字高程模型Digital Elevation Model) 数据生成的, DEM数据是用一系列等间隔的地形高程值来表示的, 代表一块方形网格地形。各点的X、Y值可从方形区域的行列号和间距值中推算出来。在构造三维地形曲面之前, 首先对原始地形数据进行预处理, 以满足我们所需要的数据格式及类型, 接着根据预处理后的顶点来构造三维地形曲面。曲面生成的方法用Bezier曲面拼接法实现。Bezier曲线, 是由一组折线集, 或称之为Bezier特征多边形来定义的。曲面生成后要在OpenGL中实现真实感三维地形可视化, 其基本过程如图3所示。

三维地形仅仅是静态的显示是不够的, 还需要能够交互式地实时动态显示。除了必要的硬件之外, OpenGL所特有的显示列表和双缓存机制也为实现三维景观的实时动态提供了有力的保证。显示列表是OpenGL为了提高程序的运行效率而引入的“批处理”技术, 是事先存储的用于稍后执行的一组OpenGL命令序列。双缓存技术是提供前后两个缓存, 在显示前台缓存内容的一帧图像时, 后台正在绘制下一帧的图像, 后台绘制完成后, 交换前后台缓存, 不断地循环, 实现地形的实时动态显示。OpenGL中双缓存是通过调用auxSwapBuffers () 函数来实现的。

本文实现的水下地形的显示分两种显示方式:一种为网格显示方式, 在此方式下, 仅将水深数据不加真实感渲染以网格的方式显示出来;另一种为地形地貌显示方式, 在此方式下把水深数据进行差补等算法处理, 经真实感渲染显示出水下地形地貌。两种方式的显示如图4、图5所示。

3 结束语

本文介绍了三维地形的软件开发, 采用的是三维图形开发工具OpenGL, 重点介绍了三维地形的建模方法, 给出了采用OpenGL开发可视化系统的方法, 实现了真实感水下地形的动态显示。本系统已经成功应用于船体铺排自动控制系统中, 能很好地显示待铺设软体排的小区域内的三维水下地形, 指导铺排的施工作业

摘要:系统采用三维图形开发工具OpenGL开发。分析了三维地形曲面的构造方法, 给出了采用开发可视化系统的方法。所实现的程序是在VC++6.0平台基础上, 基于DEM数据, 利用OpenGL提供的相关功能函数, 实现了真实感水下地形的动态显示。

关键词:OpenGL,DEM,三维地形

参考文献

[1]吴斌, 毕丽蕴.OpenGL编程实例与技巧[M].北京:人民邮电出版社, 1999.

动态显示 篇9

1 解决办法

如图1所示,通过选择字段窗体的Activate事件,把要查询的表的全部字段读出到左边的ListBox1中。“确定”按钮的作用是把已选字段保存到一个临时文本文件中。“加载”按钮的作用是把直接把上次的选择结果读取到ListBox2中。“->”按钮是移动用户所选字段到ListBox2中,“>>”是选中全部字段。“<-”和“<<”的作用相反。结果如图2所示。

2 字段选择窗体的代码

2.1 窗体的Activate事件

作用是把数据表的字段全部读取到ListBox1中供选择。exepath是窗体级变量。假设数据表在主程序exe文件所在目录的data文件夹下,采用相对路径方式访问表,利用函数extractfilepath获得主程序所在的路径

2.2->按钮

因篇幅所限,其他移动按钮代码相似,在此不作详解。

2.3 确定按钮

把用户选中的字段保存到一个临时文件中,查询时读取并转换成字段列表。另外该文件可供下次查询时直接读取。

2.4 加载按钮

这是直接读取上次的选择结果进行查询

3 实现查询按钮代码

读取保存用户所选字段的临时文件内容,并转化成字符串,即Select命令中的字段列表,字段名之间用逗号分隔开。为简化代码,去掉了日期范围条件。

4 结语

代码实现了用户在利用SQL命令查询前,可自由选择部分所需显示的字段,也可直接调出上次的选择结果。在WinXP+Delphi 7.0下调试通过,数据表为DBF格式。代码稍加改动可用于对大型数据库的查询,该方法能够明显减少网络流量,提高查询效率。

摘要:在对数据库查询时,针对有的表字段较多的情况,设计了一种动态查询显示方式,由用户自主选择要显示的字段。

关键词:数据库,SQL,动态选择,字段

参考文献

[1]刘红军.自动部署和备份SQL Server数据库的实现.潍坊学院学报,2008.

动态显示 篇10

在科研、生产商务领域的数据分析工作中,曲线图因其直观明了的特点,是最常被用到的数据表现方式。常见的曲线图有坐标时间序列图、温度变化图、股票走势图等。在一般的曲线图中,通常只含有X轴、Y轴坐标以及一条或数条曲线,展现的是数据的宏观变化与走势。当涉及到曲线上任意点的具体信息的查询时,仅以图片形式展现曲线图的方式的不足之处就凸现出来了。

了解决这一实际问题,使曲线图的应用更加完善,本文研究了在绘制曲线图的同时将曲线X,Y坐标以及点的具体信息同时展现在生成的网页上的方法。其中曲线的坐标值是由公式转换算出,不需要大量数据的支撑。并且无论是在本地浏览还是放在网上都可以实现查询功能。网页由C#程序生成,生成的结果由.jpg、.html格式显示,使用方便快捷。图1为曲线图动态信息显示在股票走势图中的实际应用。

本文将详细介绍如何在绘制曲线图的同时,将曲线X,Y坐标以及点的具体信息同时展现在生成的网页上的方法。

1 鼠标停留在确定点或区域时,相应信息的显示

当鼠标放在用户数据中的已知信息点上时,该点的信息将自动显示,效果如图2。

为实现此功能,首先要设置热点。热点的设置主要是利用C#语言计算出点屏幕坐标,然后使用JavaScript语言进行网页的编制。在JavaScript中,设置热点的语句为:

虽然本文实现的是点信息的显示,但实际上这一方法也可以用于显示某一区的信息。只需要把上文提到的热点转换为热区即可,具体语句为:

2 曲线上任意点坐标值的显示

在绘制曲线图时,有时会产生相邻点之间分布比较密集的情况,这时仅仅使用以上所提到的功能,已经不能满足需求。因此,本文提出并实现了当鼠标放在曲线的任意位置时,该位置的X,Y坐标将在曲线图的正上方显示出来的功能,如图3所示。这一方法不需要借助大量数据量,而是直接由转换公式计算出各点坐标。

为实现此功能首先要获取屏幕坐标,然后进行屏幕坐标与用户坐标之间的转换。由于很多曲线图的X轴为时间轴,图中包含了时间信息,因此还要进行时间格式的转换。

2.1 屏幕坐标转换用户坐标

根据对浏览器版本的判断,使用event.clientX,event.clienteY或者e.pageX,e.pageY语句获取屏幕坐标后,调用coordConv函数将屏幕坐标转换为用户坐标值。具体代码如下:

其中Xmin,Ymin,WcsX,WcsY,Xunit,Yunit为屏幕坐标到用户坐标的转换系数

在此要注意的是mapXOffset和mapYOffset这两个变量,他们是图片左上角角点在屏幕上的坐标值,即图片偏移量。coordConv函数中的Xmin,Ymin,WcsX,WcsY,Xunit,Yunit均由C#程序中的绘图方法传递出来,它们由绘图时定义图片大小,用户坐标最大值最小值,以及坐标轴单位长度确定

2.2 将X轴上的屏幕坐标转换为时间格式

由于很多曲线图的X轴坐标表示的是具体时间,为此,我们需要将用户坐标中的X轴坐标值通过调用ShowTimeData函数转换为时间格式。然后在网页中分别添加名称为x Num和yNum的文本框。使用document.statusform.textNum.value语句,将值传递文本框。

ShowTimeData函数具体代码如下:

3 多幅图片在同一网页中的显示

要实现将多图在同一网页中显示的功能,可通过三种方式。第一种是通过一个网页调用其他各图的网页;另一种方式是将多幅曲线图绘制在同一张图片中;当曲线数据类型相同时,我们还可以将曲线以不同颜色区分,画在同一张曲线图中。

3.1 调用网页实现多幅图在同一网页中的显示

此功能是通过在网页中添加IFRAME来调用已经生成的单图网页实现的,可将多幅图在同一网页中展示,效果如图4所示。

首先要通过listBox1.Items.Count的值获得文件数n,即绘图的循环次数。然后将以下JavaScript语句写入网页中,假设文件数为n,则重复写入n次,注意要修改单图网页的文件名以及标题名。

该语句实现的效果是在生成的IFRAME框中显示已经生成好的曲线图网页,代码如下:

3.2 将多幅曲线图绘制在单张图片中实现多图同时显示

将n张曲线图绘制在同一张图片中,通过此方法也可以实现多曲线图在同一网页中的显示,效果如图5所示。

只需将上文中提到的coordConv方法按照曲线图的不同位置分别调用n次。每次调用时的Xmin,Ymin,WcsX,WcsY,Xunit,Yunit即屏幕坐标到用户坐标的转换系数各不相同,它们的值由各个图片的用户坐标最大值最小值,以及坐标轴单位长度分别确定。调用代码如下:

3.3 将不同曲线以色彩区分绘制在同一张曲线图中

当各曲线的数值类型相同时,我们可以将它们通过颜色进行区分,绘制在同一张曲线图中。这时当鼠标放在其中任一条曲线上的点时,该点的X,Y坐标将在曲线图的正上方显示出来,效果如图6所示。

因为进行屏幕坐标与用户坐标之间转换的函数为coordConv函数,如上文所述,这个函数主要由Xmin,Ymin,WcsX,WcsY,Xunit,Yunit系数确定,这六个系数分别是由图片大小,用户坐标最大值、最小值,以及坐标轴单位长度确定。这时,对于各曲线,这几个系数的值是通用的。所以只要确定出曲线图的这几个系数便可转换出用户坐标。最后再通过document.statusform.textName.value语句将用户坐标传递文本框中即可。

4 使用C#语言生成网页

本文中曲线图的绘制以及网页编辑是均由C#程序自动生成,操作简便。可实现多幅曲线图的同时绘制,并由SW.WriteLine语句写入网页。程序使用的源数据为文本文件,生成格式为.html的网页以及.jpg格式的图片。生成的网页图不需要借助任何控件来获取坐标值,并且无论在本地还是通过互联查询都可以实现其功能。

读者可通过发邮件至gispengyuan@gmail.com获得该程序。

5 结束语

本文研究使用JavaScript实现网页曲线图动态信息显示,当用户鼠标置于曲线上任意点时,可显示出该点的具体信息以及对应坐标值,同时实现了多图在同一网页中的显示。

在当绘制曲线图的源数据点个数小于图片X方向的像素的黄金比例时,数据量小,可直接向网页导入用户数据,通过热点设置来实现查询。当绘制曲线图的源数据点个数大于图片X方向的分辨率的黄金比例时,由于相邻点之间分布密集,并且数据量过大,建议通过公式计算曲线任意点坐标实现查询功能。例如,假设图片宽度为800像素,那么当源数据的点个数小于800*0.618时,即源数据小于494个点时,通过热点设置来实现查询;当源数据点数大于494个点时,则使用公式计算曲线任意点坐标的方式来实现查询功能。

本文实现的所有功能均以网页方式展现,并由C#程序生成,与其他方式相比,不需要借助控件来获取坐标值,操作简便,并且无论是在本地浏览还是放在网上都可以实现其功能,方便了用户使用以及资源的共享

参考文献

[1]Thomas Powell,Fritz Schneider.Javascript完全手册[M].北京:电子工业出版社,2002Thomas Powell,Fritz Schneider.Javascript:The Complete Reference[M].Beijing:Publishing House of Electronics Industry,2002

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:六一儿童节日记一年级 六一儿童节日记(通用12篇) 下一篇:六一儿童节日记一年级 六一儿童节日记(通用15篇)