计算机屏幕显示的图像是设备相关位图,在从远程计算机屏幕上获取之后,经过一系列的操作,在监控计算机的屏幕上显示出来仍为设备相关位图。在监控端,有时候需要对这些图像进行保存,然而保存的图片属于设备无关图,即需要将设备相关图转化为设备无关图。根据BMP位图文件结构,需要初始化位图文件头结构、位图信息头结构和调色板。首先在传来的图像设备环境中创建一个副本设备环境。内存设备环境中的为设备相关位图,通过调用GetDIBits()将设备相关位图中的区域复制到设备无关位图中。另外还需要初始化位图文件头结构信息,位图信息头结构,从而在指定的位置创建一个后缀名为bmp格式的文件。程序主要实现代码如下:
BITMAPFILEHEADER bmfHdr; //位图文件头结构
BITMAPINFOHEADER bi; //位图信息头结构
LPBITMAPINFOHEADER lpbi; //指向位图信息头结构指针
hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES); //计算位图文件每个像素所占字节数
DeleteDC(hDC);
dwPaletteSize = (1<<wBitCount)*sizeof(RGBQUAD);//计算调色板大小
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);//设置位图信息头结构
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
//
dwBmBitsSize = ((Bitmap.bmWidth * wBitCount+31)/32)* 4 *Bitmap.bmHeight;
//为位图内容分配内存
hDib = lobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,
(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,
(BITMAPINFO*)lpbi, DIB_RGB_COLORS);
//恢复调色板
if (hOldPal)
{
SelectPalette(hDC, hOldPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
}
//创建位图文件
fh = CreateFile(lpFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件
WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);
…
4.5 界面设计
4.5.1 服务器端界面设计
4.5.2 客户端界面设计
5 系统测试
软件测试环节是每一个软件产品从设计到成品的最后一道工序,优秀的软件产品通常都经过许多严格的测试,最后才提交用户使用。测试的目的是尽可能多地暴露程序中的错误,并及时更正发现的错误,使系统的性能得到进一步提高。
软件测试包括模块(单元)测试,功能测试、系统的完整性测试、性能测试、安全性测试等等。根据软件当初的需求和设计目标,对系统进行了环境测试、软件功能的测试以及性能的测试。软件设计时目标是在局域网中的对等计算机中实现屏幕图像的互相传输,因而测试也在局域网中进行。
第一项测试是功能测试。软件设计环境是两台安装有Microsoft Windows XP操作系统的主机。两台计算机的连接方式是通过双绞线交叉连接,传输速度达到100Mbps。客户端与服务器端能够正常连接,能正常传输图像屏幕,且实时性较好,各项功能基本实现。
出现的问题:1、软件在发出注销、重启请求后能正确执行,但在关闭系统时出现进程占用CPU 99%的情况,且不能正常执行关机操作。2、在操作系统环境下,将“桌面属性”中的颜色质量调为“32位”时,保存的屏幕图像无法显示,且数据量高达60MB。
第二项测试是系统移植性测试。测试地点:学校微机实验室,测试计算机的IP地址为172.17.6.17(服务器端程序1)、172.17.6.30(服务器端程序2)、172.17.6.18(客户端程序1)和172.17.6.6(客户端程序2)。计算机的软硬件配置为:Window 2000 sp4操作系统;800*600分辨率;内存256MB; CPU 1.80GHz;网速10Mbps;颜色质量为增强色(16位)。分别运行各计算机程序,准备测试。
测试结果为:使用客户端1(172.17.6.18)连接服务器端程序1(172.17.6.17)。连接成功,可以正常传输桌面图像。能够正常操作该计算机,执行程序。如打开Word程序。在服务器端打开一个Flash程序,在传输动态图像是存在延迟,但仍然可以接受。能够获取服务器端程序1(172.17.6.17)桌面图像并保存,程序在Windows中运行正常。各项功能可以正常使用,除关闭计算机功能。
出现的问题:1、如在XP系统环境中出现问题类似,当颜色质量调为“真彩色(32位)”时,在捕捉屏幕时,程序停止运行,且保存的图片较大,用画图软件或图片浏览软件打开,提示错误:“无法描绘图像”。软件在颜色质量为“256色”或“增强色(16位)”时,可以正常保存截取的图片,一切正常。2、软件在传输图像时,存在着延迟现象,但将颜色位数设为8位后,图像颜色数为256色,图像的传输质量较好,保存位图的大小为469KB。而当颜色位数设为16位后,图像颜色数为2^16色,保存的BMP位图数据量高达1.37MB。3、服务器端程序2在172.17.6.30运行时,使用客户端程序1(172.17.6.17)连接成功后,接着使用客户端程序2(172.17.6.6)连接访问,出现客户端程序1被踢出连接,客户端程序2可以正常连接并能访问,与当初设计同时接收多个客户端连接出现偏离,功能没较好的实现。
第三项测试是使用友好度测试,软件在使用过程中,只能通过菜单实现操作,使用不是很方便,另外,在外观上,程序也很平淡。用户可以通过菜单指示正确操作软件。
第四项测试是性能测试,在实际测试中,通过修改软件设置参数改变来测试软件的性能。1、平面图像分格参数,分别设置2*2,8*4,16*16。2、颜色模式参数,分别设置为8位,16位和32位。3、设置屏幕图像刷新速度,间隔时间为398ms,799m和1000ms。另外在服务器端运行程序,如Word,Flash程序,可以观察到位图的传输和更新情况。
总结:通过上面的软件测试,发现了软件存在许多的技术问题。如程序运行不稳定的问题,系统移植性差等问题。在软件测试过程中,这些软件的缺陷得以一一显现,这表明软件测试取得了较好的成果,但也从一个侧面显示了软件设计存在的问题和不足之处,因而下一阶段的主要任务是不断的对软件做出修改,直到解决掉上面提到的问题,提高软件设计的质量。
结 论
本文实现了一个在局域网中对等计算机间相互传输屏幕图像远程控制软件,使用了Windows Socket 编程接口,提出了一个对屏幕图像进行提高传输的效率方法,可以应用于各种网络监控、远程控制、网络安全等领域,而且有很强的实用价值。同时,针对图像压缩算法,本文并没有对压缩算法的选择做最优的处理,实际系统可以根据不同应用环境采取相应的办法。软件在设计完成之后,仍有许多不足需要改进的。例如在图片的压缩过程中,可以采用JPEG压缩方法进一步减少数据传输量。保存的图片也可以保存为jpg格式,以减少存储量。
参考文献
2 (美) Dreamtech软件研发组.对等网络编程源代码解析.北京:电子工业出版社,2002.8第一版
7 许斌.JXTA—Java P2P网络编程技术.北京:清华大学出版社,2003第一版
8 (美)Daniel Brookshier等.Java P2P程序设计.北京:中国电力出版社,2003
9 梁普选.Visual C++ 程序设计与实践.清华大学出版社,2005,8 第一版
10 李凌.Winsock2 网络编程实用教程.北京:清华大学出版社,2003第一版
11 罗军舟.TCP/IP协议及网络编程技术.北京:清华大学出版社,2004第一版
12 (美)Dana Moore, John Hebeler.对等网.北京:清华大学出版社,2003第一版
13 贾斌等.网络编程技巧与实例人民邮电出版社.2001,11第一版
14 王育坚.Visual C++ 面向对象编程教程.北京:清华大学出版社,2004第一版
15 王艳平.Windows程序设计. 人民邮电出版社,2005 第一版
16 杨枝灵,王开.Visual C++ 数字图像获取 处理及实践应用.人民邮电出版社,2003 第一版
17 陆宗骐.C/C++图像处理编程.北京:清华大学出版社,2005第一版
18 郭学理,张健等.网络程序设计.武汉大学出版社,2004,7第一版
19 求是科技,肖宏伟.Visual C++ 6.0实效编程百例.人民邮电出版社,2002 第一版