CN1384427A - 大视图分块缓冲显示方法 - Google Patents

大视图分块缓冲显示方法 Download PDF

Info

Publication number
CN1384427A
CN1384427A CN 01112850 CN01112850A CN1384427A CN 1384427 A CN1384427 A CN 1384427A CN 01112850 CN01112850 CN 01112850 CN 01112850 A CN01112850 A CN 01112850A CN 1384427 A CN1384427 A CN 1384427A
Authority
CN
China
Prior art keywords
row
viewing area
view
buffer zone
border
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 01112850
Other languages
English (en)
Other versions
CN1266582C (zh
Inventor
李伽
黄晓军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Haimen science and Technology Development General Corporation
Original Assignee
Shanghai No 2 Research Institute of ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai No 2 Research Institute of ZTE Corp filed Critical Shanghai No 2 Research Institute of ZTE Corp
Priority to CN 01112850 priority Critical patent/CN1266582C/zh
Publication of CN1384427A publication Critical patent/CN1384427A/zh
Application granted granted Critical
Publication of CN1266582C publication Critical patent/CN1266582C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Controls And Circuits For Display Device (AREA)

Abstract

本发明涉及一种大视图分块缓冲显示方法,它将大视图分块,在内存中用一个规定大小的缓冲区矩阵来映射视图中的各个块,并利用后台线程,在显示和拖动的过程中预测下一步要显示的视图块并将其提交到合适的缓冲区块中,由于前台显示和后台的预测提交两个线程是同时进行的,合理的分配了任务在CPU中的时间片,提高了显示和拖动时刷新的速度,也减少了对系统内存和CPU时间的浪费。在网络规划方案的设计中,本方法得到了广泛的应用,如对于9714×11854象素的省级地图其显示装载速度比较快,拖动的时候也没有出现屏幕闪烁和抖动,过渡很平滑。

Description

大视图分块缓冲显示方法
本发明涉及计算机图像处理技术,特别是电子地图类大视图分块预测缓冲显示方法。
在城市规划、通讯网络规划及地貌遥感测绘中,常常需要显示当前规划区的数字地图或相关的背景图像作为分析参考。在进行比较大或超大规划区的规划和优化分析时,要显示的图像会很大,图像的大小可以达到100M字节甚至更大。如果将图像全部读入内存,自然可以很方便的显示或拖动,但是会造成这么大的系统资源浪费,而使进行规划所必须的大量的计算工作进行得很慢,甚至无法进行。特别是在网络规划和优化时,经常要对多个工程或同一个工程的多个设计进行对比分析,而同时打开多个视图,这样的话,就对系统的硬件资源提出了更为苛刻的要求,这样做是不现实的,也是根本不可能的。
目前,尚未见到任何公开的技术能够解决此问题,经过专利检索,也没有发现针对该问题的专利文献。
本发明的目的在于提供一种在网络规划和优化系统中,采用计算机对大视图分块和利用缓冲区矩阵预测显示方法,以最大限度的减少对系统宝贵资源的占用,尽可能地提高计算机处理和显示的效率。
本发明提出的大视图分块缓冲显示方法,主要包括以下步骤:
a、将需要显示的图像Pic从左至右、从上至下按行列分成大小相等的视图块,按顺序对所述的视图块编号,视图块的高度(BlockHeight)和宽度(BlockWidth)大于显示器显示区域的高度和宽度;
b、在计算机内存中创建一个3×3的视图缓冲区矩阵,其高度(BufferHeight)和宽度(BufferWidht)和所述视图块的高度(BlockHeight)和宽度(BlockWidth)一致,并对其进行编号;
c、创建用于显示和刷新视图的主线程;创建与主线程并行运行的从线程,该线程根据当前缓冲区矩阵和视图分块的信息进行初始化;
d、当显示区域的全部或一部分还在缓冲区矩阵的可见显示缓冲中,则显示之;
若显示区域的四个边界的任一个与3×3个缓冲区中的任一条边界发生越界,从线程在CPU空闲的时间片上进行缓冲区的预测,将图像Pic中将要显示的试图块填充到预测缓冲中(即提交过程),并判断是否需要进行缓冲区切换,调整缓冲区矩阵的位置关系;
e、在显示区域移动后的某个状态下,根据前面已经预测的各个缓冲区对应的视图块,计算显示区域和与之相交的各个缓冲区块的相交部分的图像,将其取出拼合成为显示区域中的应显示的图像,然后显示在屏幕上。
本发明提出了大视图分块缓冲显示的一种新方法,它不将整个大视图全部装入内存,而是将视图进行分块,在内存中用一个规定大小的缓冲区列表(或矩阵)来映射视图中的各个块。并利用后台线程,在显示和拖动的过程中预测下一步要显示的视图块并将其提交到合适的缓冲区块中。这样,在显示的过程中,只要对指定的显示缓冲进行显示,而显示缓冲在视图块中的映射和显示缓冲之间的切换都是在后台线程中完成的。由于前台显示和后台的预测提交两个线程是同时进行的,合理的分配了任务在CPU中的时间片,提高了显示和拖动时刷新的速度,也减少了对系统内存和CPU时间的浪费。
在网络规划方案设计中,采用了本方法。如对于9714×11854象素的省级地图其显示装载速度比较快,拖动的时候也没有出现屏幕闪烁和抖动,过渡很平滑。可见本方法已基本突破了显示和刷新受到视图大小严重限制的瓶颈。
本发明的附图说明如下:
图1为本发明的大视图显示框架图;
图2为经过分块和编号处理后的Pic图像示意图;
图3为分块后的缓冲区矩阵示意图;
图4为初始化时视块分块、缓冲区和屏幕显示关系图;
图5为缓冲区矩阵在视图分块中的位置示意图;
图6为移动后的缓冲区矩阵在视图分块中的位置示意图;
图7为视图显示部分的类关系图;
图8为显示窗口在视图缓冲区矩阵中的位置关系图;
图9为视图缓冲区矩阵和显示窗口在大视图中的位置关系图;
图10为显示窗口和缓冲区矩阵发生位置切换时的关系图;
图11示例-初始位置;
图12示例-左移、位置切换、缓冲区预测;
图13示例-左移、位置切换;
图14示例-左移、位置切换、缓冲区预测。
下面以本方法在网络规划和优化软件中的应用实施例进一步说明。
视图背景大部分为点阵,如果在程序中一次性将点阵背景全部装入,则点阵数据的大小决定了程序占用内存空间的大小,如果点阵背景为10,000×10,000个点,每个点用1个字节表示,则至少需要100M的内存空间来存放这些点阵数据,显然这是对内存空间的巨大浪费。在实际中计算机系统所处理的视图背景的大小和工程设计的具体地理区域的大小有关。如一个地区工程的地图大小可为1074×1046,不算太大。而一个省级工程的电子地图则为9714×11854,该地图很大,全部读入内存处理是不现实的。因此本实施例中采用分块缓冲预测显示的方法来实现对大视图的显示。
如图1所示,本方法将大视图的背景数据分为按行、列排序的众多小的试图块,每个试图块大小相等(边界区域除外),按顺序对所述的视图块编号。将视图数据分割为众多小试图块主要是便于定位、装载。视图块的高度(BlockHeight)和宽度(BlockWidth)大于显示器显示区域的高度和宽度,实施例中视图块的高度为显示器显示区域的高度的1~2倍,视图块的宽度为显示器显示区域的宽度的1~2倍。
假设显示器显示区域的高度和宽度为768×1024,则768×2>BlockHeight>768,1024×2>BlockWidth>1024,分块后的图像如图2所示。
在内存中创建一个3×3的视图缓冲区矩阵。其高度(BufferHeight)和宽度(BufferWidht)和所述视图块的高度(BlockHeight)和宽度(BlockWidth)一致。同样对其进行编号。分块后的缓冲区矩阵如图3所示。
视图缓冲区矩阵分为可见显示缓冲和预测待显示缓冲,前者用于缓冲当前的可见区域以及其附近将要显示的区域,后者用于存储根据当前可见区域位置所预测的可能要显示的区域。在用户浏览视图的过程中,程序一方面根据当前可见区域位置判断当前需要使用的显示缓冲,从中取得数据显示视图,另一方面则根据当前可见区域位置预测将要显示区域,并通过后台线程将点阵数据装载到预测显示缓冲中。通过这种在需要时才将点阵数据装入内存的方式,可以大大减少显示背景点阵对内存的需求,对内存的需求取决于显示缓冲大小。
实施过程中,需要主、从两个线程并行运行。主线程用来显示和刷新视图,主线程可以不创建而由主程序线程代替。而从线程是在当显示区域中的图像不在当前有效的缓冲区块中时,进行缓冲区预测和切换。从线程在CPU空闲的时间片上进行缓冲区的预测计算,并将图像Pic中对应的块填充到无效缓冲区中去(即提交过程)。根据视图分块的信息和缓冲区的信息,将视图分块中左上角的3×3个块来填充缓冲区对象。显示区域此时落在Buf1中,故显示区域和Buf1中相交部分的图像取出,并显示在屏幕上。祥见图4所示,其左边为缓冲区情况,其中小黑块为显示器显示区域,右边为视图分块情况。
缓冲区预测和提交是本方法重要的组成部分。根据屏幕显示区域在缓冲区中移动时跨越缓冲区边界时的状态和位置关系来预测和判断缓冲区矩阵中各个块的有效状态和对应的图像。缓冲区矩阵预测、切换原则和显示原则如下:
显示原则:在缓冲区预测和提交的过程中,只要显示区域的全部或一部分还在缓冲区矩阵的Buf1块中,就可以显示。如果显示区域全部落入除Buf1块的其他块中时,就必须先进行缓冲区预测,并切换缓冲区。等该显示区域位于新调整的缓冲区矩阵的Buf1中时,才可以显示。如图5和图6所示。
该显示原则不但解决了在初始显示时,显示区域一般都是落在Buf1中的问题,而且当显示区域向左或向上移动时,减少了判断的次数。该原则是本方法的一个先决条件,必须满足。
在图5所示情况下,显示区域在缓冲区的Buf1块中,此时可以显示,图5右边黑框区域表示缓冲区矩阵在视图分块中的位置。如果显示区域移动到原来缓冲区矩阵中Buf2的位置,此时不能显示相交位置处的内容,而要将缓冲区矩阵在对应的视图分块中移动。如图6所示,在该新位置上,要使显示区域落入缓冲区矩阵的Buf1块中,图6右边黑框区域表示移动后的缓冲区矩阵在视图分块中的位置,左边表示缓冲区位置。
缓冲区矩阵预测与切换原则:只要显示区域的四个边界的任一个与3×3个缓冲区中的任一条边界发生越界,就要对相应的缓冲区块进行预测。以便新的内容填充到缓冲区中来。并判断是否需要进行缓冲区切换,调整缓冲区矩阵的位置关系。
假设用行[Bufn]和列[Bufn]来表示Bufn对应的视图块在视图分块矩阵中的行号和列号。并且初始情况下,显示区域位于Buf1中。根据显示区域移动时,其四个边界和缓冲区矩阵各个边界的越界的情况,分以下几种类型来详细描述缓冲区的预测和切换。
(1)显示区域右移,根据以下判断,给从线程发信息,分别进行预测和
切换:
1.1显示区域的右边界越界
  行[Buf1]、行[Buf2]、行[Buf3]、行[Buf4]、行[Buf5]、
  行[Buf6]、行[Buf7]、行[Buf8]、行[Buf9]均不变
  列[Buf1]、列[Buf2]、列[Buf4]、列[Buf5]、列[Buf7]、列[Buf8]不变,
列[Buf3]=列[Buf2]+1
列[Buf6]=列[Buf5]+1
列[Buf9]=列[Buf8]+1;
1.2显示区域的左边界越界,此时要将缓冲区向右移动一块的单位。并将原来的缓冲区矩阵中最左边一列放到新的缓冲区矩阵的最右边一列。从而使当前显示区域位于新的缓冲区矩阵的Buf1块中,
行[Buf1]、行[Buf2]、行[Buf3]、行[Buf4]、行[Buf5]、
行[Buf6]、行[Buf7]、行[Buf8]、行[Buf9]均不变,
列[Buf1]=列[Buf2],列[Buf2]=列[Buf3],列[Buf3]=列[Buf1],
列[Buf4]=列[Buf5],列[Buf5]=列[Buf6],列[Buf6]=列[Buf3],
列[Buf7]=列[Buf8],列[Buf8]=列[Buf9],列[Buf9]=
列[Buf7];
1.3显示区域边界没有发生越界,各个Buf块的行列号不变。如果显示区域一直向右移动,则循环进行上述的判断过程,一直到视图分块的右边界为止。(2)显示区域下移,根据以下判断,给从线程发信息,分别进行预测和切换:
2.1显示区域的下边界越界
  列[Buf1]、列[Buf2]、列[Buf3]、列[Buf4]、列[Buf5]、
  列[Buf6]、列[Buf7]、列[Buf8]、列[Buf9]均不变,
  行[Buf1]、行[Buf2]、行[Buf3]、行[Buf4]、行[Buf5]、行[Buf6]不变,
  行[Buf7]=行[Buf4]+1
  行[Buf8]=行[Buf5]+1
  行[Buf9]=行[Buf6]+1;
2.2显示区域的上边界越界,此时要将缓冲区向下移动一块的单位,并将原来的缓冲区矩阵中最上边一行放到新的缓冲区矩阵的最下边一行,从而使当前显示区域位于新的缓冲区矩阵的Buf1块中,
列[Buf1]、列[Buf2]、列[Buf3]、列[Buf4]、列[Buf5]、
列[Buf6]、列[Buf7]、列[Buf8]、列[Buf9]均不变,
行[Buf1]=行[Buf4],行[Buf2]=行[Buf5],行[Buf3]=行[Buf6],
行[Buf4]=行[Buf7],行[Buf5]=行[Buf8],行[Buf6]=行[Buf9],
行[Buf7]=行[Buf1],行[Buf8]=行[Buf2],行[Buf9]=行[Buf3];
2.3显示区域边界没有发生越界,各个Buf块的行列号不变,如果显示区域一直向下移动,则循环进行上述的判断过程,一直到视图分块区域的下边界为止。
(3)显示区域左移,根据以下判断,给从线程发信息,分别进行预测和切换:
3.1显示区域的左边界越界
行[Buf1]、行[Buf2]、行[Buf3]、行[Buf4]、行[Buf5]、
行[Buf6]、行[Buf7]、行[Buf8]、行[Buf9]均不变,
列[Buf1]=列[Buf1]-1,列[Buf2]=列[Buf1],
列[Buf3]=列[Buf2],列[Buf4]=列[Buf4]-1,
列[Buf5]=列[Buf4],列[Buf6]=列[Buf5],
列[Buf7]=列[Buf7]-1,列[Buf8]=列[Buf7],
列[Buf9]=列[Buf8];
3.2显示区域的右边界越界
行列号不作改变;
3.3显示区域边界没有发生越界,各个Buf块的行列号不变。如果显示区域一直向左移动,则循环进行上述的判断过程,一直到视图分块的左边界为止。
(4)显示区域上移,根据以下判断,给从线程发信息,分别进行预测和切换:
4.1显示区域的上边界越界
   列[Buf1]、列[Buf2]、列[Buf3]、列[Buf4]、列[Buf5]、
   列[Buf6]、列[Buf7]、列[Buf8]、列[Buf9]均不变,
   行[Buf1]=列[Buf1]-1,行[Buf2]=行[Buf2]-1,
   行[Buf3]=行[Buf3]-1,
   行[Buf4]=行[Buf1],行[Buf5]=行[Buf2],行[Buf6]=行[Buf3],
   行[Buf7]=行[Buf4],行[Buf8]=行[Buf5],行[Buf9]=行[Buf6];
4.2显示区域的下边界越界
行列号不作改变;
4.3显示区域边界没有发生越界,各个Buf块的行列号不变,如果显示区域一直向左移动,则循环进行上述的判断过程,一直到视图分块的左边界为止。
(5)、显示区域其他方向上的移动均可以分解为以上的水平和垂直方向上的移动分量,按照上述相应的步骤分别计算和预测。
按照软件工程和面向对象的程序设计原则,可以抽象出以下几个在图像显示中协同配合工作的类。它们是:
TBackground       背景图层类
TView             视图类
Tfrm View         视图窗口类
TDspBkgound       显示视图的公共基类
TDspLatticeData   用于计算显示区域的类
TSmallBkground    对小视图进行显示的类
TBigBkgound       对大视图进行显示的类,在这种情况下,不产生
                  视图缓冲区
TDspBuffer        显示缓冲区类
为了说明分块缓冲预测显示实现的原理。结合图7将视图显示过程中涉及到的一些类和它们之间的相互关系进行说明。
在图7中,TBackground背景类对应的是要显示的视图数据源。根据数据的种类不同,该类又派生了电子地图类,扫描图类和规划区类三种。这三个类分别从不同的数据源读取数据。其中扫描图是点阵数据,电子地图和规划区中都有相应的背景点阵数据。主要是对点阵数据,也即栅格图像数据进行显示。电子地图和规划区中的矢量图元,如街道,河流等的显示管理都由其他类来完成。
TView类主要完成对视图中数据和显示窗口之间的管理和协调工作。
TBackground、TView、TfrmView三个类构成了视图显示功能逻辑层次上的一个划分。
为了把对视图的显示从功能上独立出来,提高模块之间的健壮性,减少耦合性,便于代码调试、维护和升级。按照面向对象的方法,把功能划分到了TDspBkgound、TDspLatticeData、TSmallBkground、TBigBkgound、TDspBuffer等几个类中来实现。
TDspBkgound是用于显示视图的基类,它提供了一些公用的函数接口,具体功能留给派生类来实现。TSmallBkground、TBigBkgound就是从该类派生的子类,它们分别对应了对小视图和大视图的显示。TDspLatticeData类则用于在大视图的各个分块中计算和当前显示区域相交的部分以及一些必要的判断。它在显示大视图的过程中频繁使用。TDspBuffer是视图缓冲类。它定义了在大视图显示过程中使用的缓冲区块。
在显示大视图的时候,定义了9个缓冲区的列表。而显示区域始终在这九个缓冲区对应的视图块中,当显示区域在视图上移动时,若满足了某种条件,则按照某种判别法则,进行缓冲区预测,将原来不在缓冲区中的视图块包含到缓冲区块中来。并计算显示区域和缓冲区块之间相交的部分。最后将相交区域拼合在一起,构成显示区域然后显示。
TDspLatticeData类中:
GetLatticeDataRegion()        用于得到要显示的区域在分块后的视图(即
                              全部背景点阵图像,该背景点阵图像如果太
                        大,则要分成大小相等的块,边界除外)中
                        对应的块号。GetBlockArea()              用于得到要显示的区域和某一个分块的相交
                        部分相对于该分块的左上角和要显示区域的
                        左上角的相对位置,从而便于从分块中“抠”
                        出图像和将“抠”出的图像拼合到要显示区
                        域中对应的位置。DrawAreaTo()                通过函数GetLatticeDataRegion()对所有的块
                        进行判断,得到与显示区域相交的分块的
                        行列号,然后对这些分块进行处理,分别
                        得到各个分块中要显示的部分在视图上的
                        确切位置,然后将它们画到画布的相应区
                        域上去。TDspBkgound类中:OnDspLatticeDataChange()    在背景点阵数据变化时调用,重新转载点
                        阵数据并刷新缓冲。GetDspLatticeData()         从TView类型的成员变量中得到关于要显
                        示的图像的一些信息。然后用这些信息来
                        填充TDspLatticeData对象的一个实例
                        fDspLatticeData。DisplayAt()                 该函数根据传入的画布、画布上可绘制区
                        域、要显示的范围等参数,从缓冲区中取
                        出一块数据来,画到画布上。TDspBuffer类中:Initialize()                根据传入的行、列、调色板等参数初始化
                        一个TBitmap对象作为缓冲,并创建一个
                        TEvent事件类对象,以便在进行缓冲区预
                         测时使用。
SetBufferOrigin()        该函数设置显示缓冲区域的起点,并和原
                         来的起点判断是否已经改变(如被拖动
                         过),若是,则要对当前的缓冲区域重新
                         进行操作,并将当前的显示缓冲对象放入
                         等待队列,后台调用线程将视图中对应的
                         区域调入缓冲对象
Render()                 该函数用于绘制图像,首先用PatBlt()函数
                         将显示数据缓冲区位图涂成白色,然后将
                         显示区和各个分块相交的部分绘制到该显
                         示数据缓冲区位图上去。
DisplayAt()              该函数得到一个显示区域和一个特定的显示
                         缓冲(即对象本身)相交的区域在该缓冲
                         区中的位置,并将该块“抠”出来,显示
                         在该区域。该函数的图解图8说明如下:
绘图区域abcd与1~9号buffer相交如图8。要从buffer5,6,7,8中将相交区域AIJO,IBKO,JOCL,OKLD取出来拼成ABCD,以便显示。以AIJO为例,它的左上角和右下角坐标分别为(1500,1500)和(2000,2000)。而相对于buffer5的绝对坐标为(500,500)。故其坐标要减去buffer5的左上角坐标。取出来的AIJO再显示到相对于(0,0)点表示的ABCD上。
  TBigBkgound类中:
Initialize()              进行初始化工作。首先读取背景数据信息(也
                          即通过调用基类TDspBkground的函数
                          GetDspLatticeData()函数后得到的
                          fDspLatticeData对象)。然后创建后台线程,
                          并设置9个缓冲区及它们的Origin边界坐标。
DisplayAt()               先根据显示范围确定要使用的显示缓冲,等待
                      它们变为有效状态(通过函数GetBufferReady()
                      实现,也即等待各个缓冲区都包括正确的视
                      图分块),最后对9个缓冲区都调用各自的
DisplayAt()           函数来绘制各个与缓冲区相交的部
                      分。
MoveTo)               该函数计算当显示区域移动后要显示的是哪
                      几个缓冲区中的内容,若当前缓冲区中的内
                      容不在内存中,是否需要提交新的内容更换
                      已有的缓冲区。也即进行缓冲区预测和分析。
                      其思路如下:
假使有一幅很大的视图pic,创建一个9个区域的缓冲,构成图9所示的格子状。首先确定一个原则:只有当要显示的视图区域的左上角坐标位于9个格子的1,2,4,5号格子时,才能显示。若不在该区域中,要移动格子,把相应的视图分块装到格子中来,使该条件满足才显示。在视图窗口移动一次后,要用函数对移动后的视图区域状态进行判断(如下图9中的阴影区域)。可以用GetViewportState()函数来完成该功能。该函数返回当前视图窗口的状态。视图窗口有以下四种状态:RightE(右跨两个缓冲区),DownE(上下跨两个缓冲区),RightDownE(跨右,下,右下三个缓冲区)和CenterE(在一个缓冲区中)。这四中情况分别对应于图10中的B、C、D、A四中状态。
然后根据移动后和移动前视图窗口的相对位置,即移动后视图窗口的左上角在X方向和Y方向上相距原来的视图窗口左上角的距离关系。例如,在图9中,视图区域移动到了阴影所在的位置,它的左上角点位于第5缓冲区中,而原来的视图区域顶点在第1缓冲区中。此时,缓冲区预测和提交的思路如下所示:设9个缓冲区的编号从上到下,从左到右分别为1,2,3,4,5,6,7,8,9。当一个完全包含在缓冲区1中的显示区域从该缓冲区水平移动到缓冲区2时,有以下几个步骤:(1)当还在第一个缓冲区中时,显示区域的成员变量BoundState.top(记录的是左上角在移动后是否跨过两个缓冲区)=0。BoundState.left=0,BoundState.right和BoundState.top和BoundState.bottom均为0。见图11。(2)当由边界刚刚超出第一个缓冲区时,除了BoundState.right=1外,boundState.top,BoundState.left,BoundState.bottom均为0。此时,会调用函数PredictBuffer()来预测缓冲区。见图12。(3)预测缓冲区时,可以计算得到2号,5号右边的缓冲区对应的视图分块号应该为3和6。但下面的一行则用当前视图分块行的前一行来填充,若没有,则不填充,此处为x1,x2和x3(因为下一次有可能是向前移动)。见图13(4)继续右移时,到显示区域的左上角也越过缓冲区1到达缓冲区2中时,此时BoundState.left=1,会调用函数PredictBuffer()预测缓冲区,结果是将第一列水平移到最右端,因为有可能显示区域会左移。若显示区域继续右移到又发生跨越缓冲区时,原来从最左边移过来的那一列缓冲区是不正确的(只是为了防止显示区域左移),现在就应该用正确的视图分块来填充它。见图14。(5)这样一直右移,则会一直循环。向下或其他方向上的移动和此类似。GetRenderBuffer()             从等待提交的缓冲区队列中获取当前
                          待提交的显示缓冲对象。BufferReady()                 将缓冲对象设置为有效状态。EndBuffer()                   结束一个正在提交的线程。BufferWaitForRender()         把一个显示缓冲对象放到等待提交的
                          队列中,若当前提交的显示缓冲对
                          象为该对象,则结束对该对象的提
                          交,并将其放入等待队列中,等待
                        提交。若该对象已经在等待队列中,
                        则返回。
GetViewportState()      根据显示区域移动前后的状态得到显
                        示区域当前的状态。从而决定是否
                        要进行缓冲区预测。
PredictBuffer()         进行缓冲区预测和提交。
LoadBuffer()            根据当前显示区域状态左上角坐标确
                        定显示缓冲区,并正式提交。
SwitchViewtoBuffer()    把9个缓冲区进行水平(左移)和垂直
                        (上移)的切换。
SwitchBuffertoView()    把9个缓冲区进行水平(右移)和垂直
                        (下移)的切换。
SkipAllRenderBuffer()   忽略所有当前待提交的线程并等待后
                        台线程挂起。
本发明提出了解决大视图显示的有效途径,在网络规划和优化方案的设计、实施中本方法得到了广泛的应用。本发明提出的基本原理和技术,按照上面的类关系和模型,以及相关的调用关系,可以在不同的能够实现和支持多任务和消息处理的平台上实现。

Claims (3)

1、一种大视图分块缓冲显示方法,其特征在于包括以下步骤:
a、将需要显示的图像Pic从左至右、从上至下按行列分成大小相等的视图块,按顺序对所述的视图块编号,视图块的高度和宽度大于显示器显示区域的高度和宽度;
b、在计算机内存中创建一个3×3的视图缓冲区矩阵,其高度和宽度和所述视图块的高度和宽度一致,并对其进行编号;
c、创建用于显示和刷新视图的主线程;创建与主线程并行运行的从线程,该线程根据当前缓冲区矩阵和视图分块的信息进行初始化;
d、当显示区域的全部或一部分还在缓冲区矩阵的可见显示缓冲中,则显示之;
若显示区域的四个边界的任一个与3×3个缓冲区中的任一条边界发生越界,从线程在CPU空闲的时间片上进行缓冲区的预测,将图像中将要显示的试图块填充到预测缓冲中,并判断是否需要进行缓冲区切换,调整缓冲区矩阵的位置;
e、在显示区域移动后的某个状态下,根据前面已经预测的各个缓冲区对应的视图块,计算显示区域和与之相交的各个缓冲区块的相交部分的图像,将其取出拼合成为显示区域中的应显示的图像,然后显示在屏幕上。
2、根据权利要求1所述大视图分块缓冲显示方法,其特征在于:所述图像的视图块的高度为显示器显示区域的高度的1~2倍,视图块的宽度为显示器显示区域的宽度的1~2倍。
3、根据权利要求1所述大视图分块缓冲显示方法,其特征在于缓冲区的预测和切换的步骤包括:
(1)、显示区域右移,根据以下情况分类计算预测,
1.1显示区域右边界越界时,所有行号、列[Buf1]、列[Buf2]、列[Buf4]、列[Buf5]、列[Buf7]及列[Buf8]均不变,列[Buf3]、列[Buf6]及列[Buf9]分别为原列号列[Buf2]、列[Buf5]及列[Buf8]加1;
1.2显示区域的左边界越界时,将缓冲区向右移动一块的单位,并将原缓冲区矩阵中最左边一列放到新的缓冲区矩阵的最右边一列,使当前显示区域位于新的缓冲区矩阵的Buf1块中;所有行号均不变,列[Buf1]~列[Buf9]分另为原列号列[Buf2]、列[Buf3]、列[Buf1]、列[Buf5]、列[Buf6]、列[Buf3]、列[Buf8]、列[Buf9]及列[Buf7];
1.3显示区域边界没有发生越界时,各个Buf块的行列号不变,如果显示区域一直向右移动,则循环进行上述的判断过程,一直到视图分块的右边界为止;
(2)、显示区域下移,根据以下情况分类计算预测,
2.1显示区域的下边界越界时,行[Buf1]~行[Buf6]和所有的列号均不变,行[Buf7]、行[Buf8]及行[Buf9]为原行号行[Buf4]、行[Buf5]及行[Buf6]分别加1;
2.2显示区域的上边界越界时,将缓冲区向下移动一块的单位,并将原缓冲区矩阵中最上边一行放到新的缓冲区矩阵的最下边一行,使当前显示区域位于新的缓冲区矩阵的Buf1块中;列号均不变,行号行[Buf1]~行[Buf9]分别为原行号行[Buf4]~行[Buf9]、行[Buf1]~行[Buf3];
2.3显示区域边界没有发生越界,各个Buf块的行列号不变,如果显示区域一直向下移动,则循环进行上述的判断过程,一直到视图分块区域的下边界为止;
(3)、显示区域左移,根据以下情况分类计算预测,
3.1显示区域的左边界越界时,行号均不变,列[Buf1]、列[Buf4]以及列[Buf7]分别为相应的原列号减1,列[Buf2]、列[Buf3]、列[Buf5]、列[Buf6]、列[Buf8]、列[Buf9]分另为原列号列[Buf1]、列[Buf2]、列[Buf4]、列[Buf5]、列[Buf7]及列[Buf8];
3.2显示区域的右边界越界时,行列号不作改变;
3.3显示区域边界没有发生越界,各个Buf块的行列号不变,如果显示区域一直向左移动,则循环进行上述的判断过程,一直到视图分块的左边界为止;
(4)、显示区域上移,根据以下情况分类计算预测,
4.1显示区域的上边界越界时,所有列号不变,行[Buf1]~行[Buf3]分别为相应的原行号减1,行[Buf4]~行[Buf9]分别为原行号行[Buf1]~行[Buf6];
4.2显示区域的下边界越界时,行列号不变;
4.3显示区域边界没有发生越界,各个Buf块的行列号不变,如果显示区域一直向左移动,则循环进行上述的判断过程,一直到视图分块的左边界为止;
(5)、显示区域其它方向上的移动分解为上述水平和垂直方向上的移动分量,按照上述相应步骤分别进行计算和预测。
CN 01112850 2001-05-06 2001-05-06 大视图分块缓冲显示方法 Expired - Fee Related CN1266582C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 01112850 CN1266582C (zh) 2001-05-06 2001-05-06 大视图分块缓冲显示方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 01112850 CN1266582C (zh) 2001-05-06 2001-05-06 大视图分块缓冲显示方法

Publications (2)

Publication Number Publication Date
CN1384427A true CN1384427A (zh) 2002-12-11
CN1266582C CN1266582C (zh) 2006-07-26

Family

ID=4659597

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 01112850 Expired - Fee Related CN1266582C (zh) 2001-05-06 2001-05-06 大视图分块缓冲显示方法

Country Status (1)

Country Link
CN (1) CN1266582C (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1306448C (zh) * 2003-08-21 2007-03-21 国际商业机器公司 分散大图像的部分以适合较小有限观看区域的装置与方法
CN100411009C (zh) * 2005-08-26 2008-08-13 致伸科技股份有限公司 图像显示系统及方法
CN101059949B (zh) * 2007-04-03 2010-05-26 广东威创视讯科技股份有限公司 海量图像数据的压缩、存储和显示方法
CN101287075B (zh) * 2007-04-09 2010-06-09 索尼株式会社 视频信号处理设备、视频信号处理方法和图像显示设备
CN102243755A (zh) * 2010-05-13 2011-11-16 联发科技股份有限公司 图像处理方法及图像处理装置
CN102376291A (zh) * 2010-08-19 2012-03-14 深圳芯邦科技股份有限公司 一种控制图像显示的方法及装置
CN102520897A (zh) * 2011-11-14 2012-06-27 中兴通讯股份有限公司 一种移动终端及其提高屏幕界面绘制速度的方法
CN101416217B (zh) * 2006-04-11 2012-08-08 高通股份有限公司 用以促进使用小行缓冲器来处理小或大图像的技术
CN102103478B (zh) * 2009-12-22 2013-02-13 联想(北京)有限公司 一种显示数据截取方法、装置和系统
CN103035219A (zh) * 2012-12-25 2013-04-10 广东威创视讯科技股份有限公司 点阵型液晶显示器的读写方法和装置
CN101668192B (zh) * 2008-09-04 2013-05-01 新奥特(北京)视频技术有限公司 一种基于c/s模式实时传输大数据量图像的方法
CN103105131A (zh) * 2013-01-24 2013-05-15 东莞市嘉腾仪器仪表有限公司 一种影像测量仪显示图像的方法
CN103455973A (zh) * 2012-05-28 2013-12-18 方正国际软件(北京)有限公司 一种屏幕图像绘制方法和装置
CN103677710A (zh) * 2013-11-11 2014-03-26 广东鼎燊科技有限公司 一种显示屏交互显示方法
CN108133094A (zh) * 2017-12-14 2018-06-08 中国电子科技集团公司第四十七研究所 用于反熔丝的现场可编程门阵列的布局布线显示方法
CN108876712A (zh) * 2018-06-21 2018-11-23 东南大学 基于双投影变换的球形封闭座舱全景显示方法

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1306448C (zh) * 2003-08-21 2007-03-21 国际商业机器公司 分散大图像的部分以适合较小有限观看区域的装置与方法
CN100411009C (zh) * 2005-08-26 2008-08-13 致伸科技股份有限公司 图像显示系统及方法
CN101416217B (zh) * 2006-04-11 2012-08-08 高通股份有限公司 用以促进使用小行缓冲器来处理小或大图像的技术
CN101059949B (zh) * 2007-04-03 2010-05-26 广东威创视讯科技股份有限公司 海量图像数据的压缩、存储和显示方法
CN101287075B (zh) * 2007-04-09 2010-06-09 索尼株式会社 视频信号处理设备、视频信号处理方法和图像显示设备
CN101668192B (zh) * 2008-09-04 2013-05-01 新奥特(北京)视频技术有限公司 一种基于c/s模式实时传输大数据量图像的方法
CN102103478B (zh) * 2009-12-22 2013-02-13 联想(北京)有限公司 一种显示数据截取方法、装置和系统
CN102243755B (zh) * 2010-05-13 2013-03-20 联发科技股份有限公司 图像处理方法及图像处理装置
CN102243755A (zh) * 2010-05-13 2011-11-16 联发科技股份有限公司 图像处理方法及图像处理装置
CN102376291B (zh) * 2010-08-19 2014-07-30 深圳芯邦科技股份有限公司 一种控制图像显示的方法及装置
CN102376291A (zh) * 2010-08-19 2012-03-14 深圳芯邦科技股份有限公司 一种控制图像显示的方法及装置
CN102520897A (zh) * 2011-11-14 2012-06-27 中兴通讯股份有限公司 一种移动终端及其提高屏幕界面绘制速度的方法
CN102520897B (zh) * 2011-11-14 2015-01-28 中兴通讯股份有限公司 一种移动终端及其提高屏幕界面绘制速度的方法
CN103455973A (zh) * 2012-05-28 2013-12-18 方正国际软件(北京)有限公司 一种屏幕图像绘制方法和装置
CN103035219A (zh) * 2012-12-25 2013-04-10 广东威创视讯科技股份有限公司 点阵型液晶显示器的读写方法和装置
CN103035219B (zh) * 2012-12-25 2015-10-28 广东威创视讯科技股份有限公司 点阵型液晶显示器的读写方法和装置
CN103105131A (zh) * 2013-01-24 2013-05-15 东莞市嘉腾仪器仪表有限公司 一种影像测量仪显示图像的方法
CN103105131B (zh) * 2013-01-24 2015-08-19 东莞市嘉腾仪器仪表有限公司 一种影像测量仪显示图像的方法
CN103677710A (zh) * 2013-11-11 2014-03-26 广东鼎燊科技有限公司 一种显示屏交互显示方法
CN108133094A (zh) * 2017-12-14 2018-06-08 中国电子科技集团公司第四十七研究所 用于反熔丝的现场可编程门阵列的布局布线显示方法
CN108133094B (zh) * 2017-12-14 2021-08-24 中国电子科技集团公司第四十七研究所 用于反熔丝的现场可编程门阵列的布局布线显示方法
CN108876712A (zh) * 2018-06-21 2018-11-23 东南大学 基于双投影变换的球形封闭座舱全景显示方法

Also Published As

Publication number Publication date
CN1266582C (zh) 2006-07-26

Similar Documents

Publication Publication Date Title
CN1266582C (zh) 大视图分块缓冲显示方法
CN1534476A (zh) 矢量图形的标记语言和对象模型
CN1313910C (zh) 图像显示方法
CN1534511A (zh) 视窗和背景图形接口
CN1183778C (zh) 图象解码装置及记录媒体
CN1288603C (zh) 图像处理器及其组件、和渲染方法
CN101080698A (zh) 使用可编程硬件进行的实时显示后处理
CN1924873A (zh) 游戏地图的存储方法及装置、游戏地图的显示方法及系统
CN1308895C (zh) 用于生成图形数据的可视表示和数字文档处理的系统和方法
CN110377285B (zh) 一种生成页面骨架屏的方法、装置及计算机设备
CN1653488A (zh) 显示驱动器ic、显示模块以及合并有图形引擎的电子装置
CN1904827A (zh) 显示壁纸的方法和显示壁纸的装置
CN1725168A (zh) 三维运动图形用户接口和提供其的方法和设备
CN1577310A (zh) 信息处理系统和存储器管理方法
CN1119046A (zh) 面向目标的结构区域系统
CN1508759A (zh) 用于处理信息的设备、方法和程序
CN1773552A (zh) 计算机绘图之颜色资料的压缩系统及方法
CN1729937A (zh) 图像处理装置及图像处理方法
CN113112579A (zh) 渲染方法、装置、电子设备和计算机可读存储介质
CN1866293A (zh) 与数据相关的槽位选择机制的纹理快取储存器控制
CN1969299A (zh) 图像生成装置及图像生成方法
CN1893617A (zh) 动态补偿显示
WO2011035568A1 (zh) 实现图像层在视频层上半透明效果的方法、装置和机顶盒
CN105096364B (zh) 一种动画数据生成方法、装置及电子设备
CN1869904A (zh) 用于展示的信息处理系统和记录介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent for invention or patent application
COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: SHENZHENG CITY ZTE CO., LTD. SHANGHAI SECOND INSTITUTE TO: ZTE CO., LTD.

CP02 Change in the address of a patent holder

Address after: Law ZTE building 518057 Guangdong city of Shenzhen province Nanshan District high tech Industrial Park, Cozi Road

Applicant after: ZTE Corporation

Address before: 200233 No. 396, Shanghai, Guilin Road

Applicant before: Shanghai Inst. of No.2, Zhongxing Communication Co., Ltd., Shenzhen City

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: HAIMEN TECHNOLOGY DEVELOPMENT CORP.

Free format text: FORMER OWNER: ZTE CORPORATION

Effective date: 20130410

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 518057 SHENZHEN, GUANGDONG PROVINCE TO: 226144 NANTONG, JIANGSU PROVINCE

TR01 Transfer of patent right

Effective date of registration: 20130410

Address after: 226144, 600 Beijing Road, Haimen, Jiangsu province (administrative center, room 0212)

Patentee after: Haimen science and Technology Development General Corporation

Address before: 518057 Nanshan District science and Technology Industrial Park, Guangdong high tech Industrial Park, ZTE building

Patentee before: ZTE Corporation

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20060726

Termination date: 20160506

CF01 Termination of patent right due to non-payment of annual fee