- 相關(guān)推薦
大屏幕圖像的快速保存和恢復(fù)
摘 要 該文介紹了一種在圖形狀態(tài)下能快速保存和恢復(fù)任意大小,任意數(shù)目的屏幕區(qū)域的新算法及其C實(shí)現(xiàn),該算法可代替Turbo C 2.0, Borland C 3.1中的imagesize, getimage, putimage位圖函數(shù),屏蔽內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。適合于需要保存和恢復(fù)大屏幕圖象區(qū)域的工程軟件及使用多級菜單窗口軟件系統(tǒng)中。
一、Turbo C Borland C 中的三個位圖操作函數(shù)
unsigned far imagesize (int left, int top, int right, int bottom);
void far getimage (int left, int top, int right, int bottom, void far *bitmap);
void far putimage (int left, int top, void far *bitmap);
原型在graphics.h中,這三個函數(shù)用于把屏幕上的一個位圖拷貝到主存儲區(qū)(640K內(nèi)),然后把它放回屏幕。getimage將屏幕上的一個矩形區(qū)域的位圖拷貝到主存儲區(qū)(640K內(nèi))中,left、top、right、bottom四個參數(shù)用于定義屏幕上的矩形。bitmap指向主存儲區(qū)中存放位圖的區(qū)域。該區(qū)域前兩個Bytes用于存放矩形的寬和高。其余部分存放位圖本身。imagesize決定getimage用于保存指定矩形所需的字節(jié)數(shù)。它返回的位圖大小包括用于記錄矩形的寬和高的空間。putimage將以前用getimage保存的位圖重新送回屏幕。位圖左上角位于(left, top),bitmap指向主存儲區(qū)中存放位圖的區(qū)域。
以目前最通用的VGA 640*480*16色方式為例,當(dāng)需要保存整個屏幕區(qū)域時約需640*480/2=153,600 Bytes,約合150 KB左右。而imagesize計(jì)算存儲指定目標(biāo)區(qū)域所需字節(jié)數(shù),若指定區(qū)域要求字節(jié)數(shù)> = 64K-1則返回0xFFFF (-1),使程序無法存儲。另外,getimage所需的緩沖區(qū)是從Heap中申請的或是靜態(tài)申請的。因此要占用寶貴的640K常規(guī)內(nèi)存。如果有>=640KB/150KB=5幅的大屏幕圖像需要保存和恢復(fù),則內(nèi)存將會用盡而出錯。在大型工程軟件項(xiàng)目及各種GUI中,快速保存及恢復(fù)屏幕圖像已成為一種良好的界面設(shè)計(jì)方法,因此本文介紹了一種簡便,易行的新算法用于替換上述標(biāo)準(zhǔn)的位圖操作函數(shù)。
二、三個新的位圖函數(shù)
void NewGetImage (int left, int top, int right, int bottom, int win-id);
void NewPutImage (int left, int top, int right, int bottom, int win-id);
int NewImageSize (int left, int top, int right, int bottom, int *height, int*block-num);
首先,將需要保存的指定目標(biāo)區(qū)域(left, top,right, bottom)等分成若干個存儲面積小于64KB-1的小矩形塊B1,B2,B3,..., Bn,然后利用標(biāo)準(zhǔn)的imagesize和getimage函數(shù)分n次將各塊保存到同一個位圖文件中。文件名形式為"WINXXX. SAV", "XXX"是該區(qū)域(或稱為窗口)的標(biāo)志號,它應(yīng)是000-999之間的一個值,且是唯一的。如WIN666.SAV.分塊算法如下:
(i)單塊高度=單塊的最大塊長*每字節(jié)點(diǎn)數(shù)/塊寬度
(ii)分塊總數(shù)=指定目標(biāo)區(qū)域高度/單塊高度
(iii)實(shí)際分塊總數(shù)=分塊總數(shù),如果指定目標(biāo)區(qū)域高度%單塊高度=0
分塊總數(shù) 1,如果指定目標(biāo)區(qū)域高度%單塊高度!=0
注:
(a):單塊的最大塊長越大,則單塊高度越大,分塊總數(shù)越小,顯示速度越快,但應(yīng)小于64KB-1,一般取63KB以下。
(b):每字節(jié)點(diǎn)數(shù)由當(dāng)前顯示器的圖形方式確定。如當(dāng)前一個點(diǎn)能夠顯示的最大顏色數(shù)為MaxColor,則每字節(jié)可存儲的點(diǎn)數(shù)為:log2 MaxColor。如對VGA 640 * 480 * 16方式每字節(jié)點(diǎn)數(shù)=2。用戶需要在初始化圖形方式后,給定每字節(jié)點(diǎn)數(shù),本文以如下方式實(shí)現(xiàn):
switch ((getmaxcolor () 1))
{
case 2 :DotPerByte=8; break;
case 4 :DotPerByte=4; break;
case 16 :DotPerByte=2;
[1] [2] [3] [4] [5]
【大屏幕圖像的快速保存和恢復(fù)】相關(guān)文章:
保存和恢復(fù)CAD的視圖11-08
雷達(dá)表盤圖像移動目標(biāo)的快速識別與跟蹤05-01
基于調(diào)制傳遞函數(shù)的航天遙感圖像恢復(fù)研究04-26
醫(yī)學(xué)圖像三維重建中的快速表面繪制04-28
一種快速有效的NQR探頭恢復(fù)方法04-26
透析袋的預(yù)處理和保存06-08
談電子檔案的保存和利用論文04-29
中國涂料行業(yè)市場預(yù)計(jì)2010年恢復(fù)快速增長04-30
保存的意思, 保存的解釋04-30
快速閱讀的技能和技巧(2)04-30