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