DirectDraw技术在快视显示系统中的应用
2010-06-13张华琳王士成
张华琳,高 升,马 茜,王士成
(1.河北远东哈里斯通信有限公司,河北石家庄050081;2.中国电子科技集团公司第五十四研究所,河北石家庄050081)
0 引言
随着航天及卫星遥感器件技术的迅速发展,遥感卫星在数字测绘、资源调查、灾害监测、城市规划、土地利用、环境保护和旅游导航等方面发挥着越来越重要的作用,其所形成的影像图片分辨率以每10年一个数量级的比率提高。
采用普通的图像显示技术已经很难满足卫星宽幅图像高速平滑显示的需求,而微软提供的DirectDraw技术可以很好地解决这方面问题。DirectDraw技术支持对显示存储器中位图进行直接访问,快速实现硬件的位块转移和缓存翻转,从而加速硬件和软件图形的实时显示和处理。DirectDraw在提供这些功能的同时,仍与现在基于Windows环境的应用程序和设备驱动程序保持兼容,并提供了一种设备无关的方法以获得访问特定的显示设备高级的特性。
1 软件设计与实现
利用DirectDraw技术实现卫星图像数据的快速显示,需要创建2个进程,一个进程用于图像数据的接收,并将数据存储在本地硬盘以便进行回放显示;另一个进程用于图像的实时快速显示。DirectDraw技术的层次结构如图1所示,软件的输入处理输出(IPO)如图2所示。
图1 DirectDraw的层次结构
图2 软件输入处理输出图
1.1 创建DirectDraw对象、设置协作级别
在程序框架下创建DirectDraw对象,DirectDraw对象代表显示适配器,是整个软件的核心,DirectDraw对象创建成功之后才可创建图面、调色板等其他相关对象。创建函数需要输入视频卡驱动的指针,如果调用成功则返回有效的对象接口,如果失败则将提示硬件不支持、内存溢出或参数无效等错误信息。
设置软件与操作系统的协作级别以实现软件是以全屏方式还是以窗口模式来运行。在全屏模式下软件可以直接操作视频设备,整个屏幕表面完全分配给应用程序。而在窗口模式下,程序不能独占整个屏幕,显示数据时需要与操作系统进行协作,并且不能改变显示器分辨率和主图面的调色板,也不支持翻面操作。由此可见,快视显示程序在全屏模式下要比窗口模式运行快速得多。设置协作级别的函数需要输入窗口句柄和控制参数,返回调用成功信息或调用失败时的错误代码。
1.2 设置程序显示模式
软件的显示模式用于硬件设置,以描述快视数据显示时显示器宽、高的像素数以及像素的位深度。
显示模式分为调色板式和非调色板式。对于调色板式显示模式来说,每一个像素的颜色值以一个相关调色板的索引值来代表,而显示模式的位深度决定了调色板中可容纳的颜色数量。在非调色板模式下显示的即是像素的真实颜色。只有在显示模式位深度为8的情况下才有必要使用调色板模式,以此达到显示彩色颜色的目的。DirectDraw支持1位、2位、4位和8位的调色板。使用调色板模式可以极大充分地节省显存或内存空间,但同时也有显示非真实颜色的缺陷。
使用函数列举视频卡所支持的全部显示模式,根据所接收图像的实际情况和需求设置视频模式,如果仅是黑白图像,则只需将色深设置为8位即可,以充分利用显存空间,达到最平滑、最快速的目的。设置显示模式需要输入图像显示的宽、高、位深度及屏幕的刷新率。在后续创建的主图面及离屏图面必须符合显示模式的尺寸和位深度。
在快视图像数据显示完毕时,需要调用恢复显示模式的方法将显示器还原到原来的显示模式,以备其他程序使用。
1.3 创建显示主图面和离屏图面
主图面直接对应于被视频卡光栅化的实际显存(VRAM),它直接指向屏幕图像,并且主图面的存在形式必须与视频的显示模式相对应,即有相同的像素宽度、高度和位深度。
创建主图面的函数返回图面指针,即与屏幕显示直接对应的显存或是内存区域。根据主图面的指针,用函数锁住图面区域,直接访问帧缓存或离屏图面存储区。在完成数据操作后,需要调用函数来解除锁定的图面。
图面中像素的行间距并非为固定的数值,在锁定图面区域前,需要调用函数获取像素的行间距,否则一旦行间距因其他潜在因素被改变,图像数据将显示混乱。
当图面对象内存被破坏甚至被释放时,可以调用恢复图面的函数为图面再次分配内存,并需要重新写入像素数据。
为平滑实时地显示快视图像,可以采用双缓冲或离屏图面技术。
双缓冲,即在缓冲区中绘制图像,在完成接收一行或几行数据后,将数据拷贝到显示主图面进行显示。为缓冲区建立2个指针,一个是读取指针,一个是写入指针。外部图像数据通过写入指针,保存到系统内存中,需要显示的图像数据通过读取指针从内存中获取。这2个指针要求不能相互超越,即先写后读。针对主频在3.0 G以上,内存不小于1 G当前主流的计算机配置,此技术指标至少可以到达45 fps。双缓冲技术流程如图3所示。
离屏图面技术则充分利用了硬件加速功能,离屏图面是一个相对独立的图面,不与任何对象产生隶属关系,所以在创建时要声明离屏图面的大小。在默认情况下,软件在显存中创建离屏图面,当显存容量不足时,DirectDraw将把离屏图面置于系统内存中。
图3 双缓冲操作流程图
离屏图面创建成功后,即可直接进行写数据操作,然后利用图面交换将离屏图面中的图像复制到主图面,这种复制是利用硬件来实现的,没有明显的延迟,是双缓冲技术远不能及的。离屏图面与主图面交换实现过程如图4所示。
图4 离屏图面与主图面交换实现示意图
1.4 实现图像的条带显示
单屏显示器不能完整显示幅宽过大的卫星快视图像,因此软件采用全景显示和条带显示2种方式。在全景显示方式下,需要对图像进行抽点;在条带显示方式下,根据图像的整体宽度,决定图像纵向条带数量,对图像进行分条带显示,可以根据需求,来选择进行显示的条带号。
进行抽点显示无疑降低了图像显示的分辨率,失去了图像高清显示的目的,而条带显示又不能全景观察。为了解决此问题,可以建立多显示器系统。在多显示器系统中如果设置了普通的协作级别,只有窗口完全在主设备的显示区内才能使用硬件加速,若一个窗口同时在2台或多台显示器上,那么图面硬件方式的拷贝只能以仿真方式运行,处理性能会明显变慢。
使用函数枚举出系统中的所有显示设备,并为每个设备创建单独的DirectDraw对象,但与操作系统的协作级别只可设置一次,针对不同的DirectDraw对象分别设置主图面、双缓冲或离屏图面。
在图像显示过程中,对图像进行放大、缩小、漫游、光学增强和抽点显示等方面的操作,可以采用DirectInput技术实现。在图像滚动显示时可以采用暂停缓冲区复制或暂停离屏页面操作来达到图像凝视的效果。
2 系统仿真与性能测试
进行系统仿真与性能测试,需要建立快视数据发送系统、显示系统并准备相关的快视图像模拟数据。
在实际应用中,地面站可同时接收多颗卫星下传的快视图像数据,因此快视数据发送系统应建立多个发送端。
评价快视显示系统的性能主要由快视图像的接收速率和显示速率来确定。
(1)系统仿真
快视数据发送系统由3台处理器为1.7G,内存为512M,显存为64 M,并装有可循环调速发送图像数据模拟软件的计算机组成。
快视数据显示系统为一台处理器为3.0 G,内存为1 G,显存为256 M,装有使用VC6.0开发的快视数据显示软件的计算机。
快视图像模拟数据包括像素数为2 048×4 000、4 096×4 000的8位及32位图像。
(2)性能测试
在仿真环境下,发送端的3台计算机同时向快视显示系统循环发送快视数据。
数据传输速率MT可用式(1)表示,数据显示速率MD可用式(2)表示。在式(1)、式(2)中C是数据发送端发送图像的循环次数,n代表数据发送系统中计算机的数量,i是发送系统中计算机的编号,h是图像数据的高度,w是图像数据的宽度,b是图像的位深,B是显示模式的位深,T代表数据传输的时间。
当i=1,即接收单颗卫星的快视数据,并且B=bi时 ,MT=MD。
测试过程中,快视显示系统(双屏)的显示模式设置为2048(宽)×1536(高)×32(位)。在480 s内,发送端第1台计算机传输2048(宽)×4000(高)×8(位)的图像42次;发送端第2台计算机传输2048(宽)×4000(高)×32(位)的图像38次;发送端第 3台计算机传输4096(宽)×4000(高)×32(位)的图像40次。根据公式计算出显示端的显示速率MD1、MD2、MD3分 别为22 Mbps,20Mbps,42 Mbps,传 输速率MT为69Mbps。此时系统能够平滑显示快视数据,未出现图像抖动、跳跃现象。
在单通道数据传输情况下,发送端在390 s内传输4096(宽)×4000(高)×32(位)图像56次,接收端(双屏)显示模式为2048(宽)×1536(高)×32(位),经计算得MD=MT=72Mbps,此时快视图像仍能保持平滑显示。
3 结束语
DirectDraw技术是以组件对象模型(COM)的方式来实现的,可直接访问显示存储器,对图像像素数据进行读写及修改操作,由于在程序中DirectDraw优先在显存中创建主图面和离屏图面,如果显存容量不足,便会将图面放置在内存中,这会影响硬件加速性能的利用,因此为使快视显示系统达到更好的显示效果,运行此系统的计算机需要具有较大的显存。
与其他图像显示技术相比,DirectDraw技术在卫星快视图像数据显示系统中已展现出其优越的性能,同时可应用于无人机、飞艇遥感图像的接收与显示系统中。
[1]武永康.DirectDraw原理与API参考[M].北京:清华大学出版社,2000.
[2]LAMOTHE A.Tricks of The Windows Game Programming[M].北京:中国电力出版社,2004.
[3]甘 泉.PC游戏编程(DirectX 8)[M].北京:清华大学出版社,2003.
[4]DUNLOP R.DirectX 7速成教程[M].北京:机械工业出版社,2002.
[5]柳青松.基于DirectDraw的计算机图像显示[J].火控雷达技术,2004,32(3):76-78.