首页 > 留学知识库

问题: 求救!!!计算机毕业论文求救

我毕业论文题目是网页对象捕获软件设计,哪位大哥知道相关的资料能助我完成毕业论文,不胜感激。我只了解网页对象大概有链接 flash,图片 视频。
论文怎么写呢?资料我也找不到 谁能帮帮我?马上就要毕业答辩,非常焦急

解答:

DOS和Windows系统都有很多自己的屏幕捕获软件,如PZP、CorelCapture,Windows系统还集成了屏幕捕获功能,它们都能满足屏幕捕获的大多数要求。这里介绍一种动态跟踪性能较强,并具有一定的屏幕特技功能的Windows屏幕捕获程序的设计与实现。笔者为该程序取了一个好听的名字:动态窗口相机(Dynamic Window Camera)。以下简称 DynWC程序。 一、基本设计思想 DynWC程序可动态地将全屏幕或部分屏幕内容拷贝到兼容内存设备表中,并以用户指定的特技方式显示在弹出子窗口中;DynWC程序将动态捕获的一系列屏幕内容存储在自定义的屏幕内存设备(以下称屏幕帧)队列中,以便捕获之后,用户可根据需要选择性地保存一些有用的屏幕帧;为实现动态屏幕捕获功能,DynWC程序应有自己的计时器输入。 二、DynWC程序的设计目标 1、捕获对象 DynWC程序应能捕获以下四类对象: ·DesktopWindows即桌面窗口 ·可见的任意父窗口或其任意子窗口 ·可见的任意父窗口或其任意子窗口的客户区 ·屏幕裁剪区域 2、捕获方式 DynWC程序应具有两种捕获方式: ·自动跟踪方式 ·手动跟踪方式 3、捕获频率 ·自动跟踪方式的捕获频率动态可调 4、DynWC程序应具有至少三种镜相特技形式: ·水平镜相 ·垂直镜相 ·对角镜相 5、辅助镜相特技 GDI在输出操作中由光栅操作码定义如何进行颜色组合。输出操作涉及到当前的画刷、可能的源位图和目标位图。Windows API定义了十五种光栅操作码,笔者选用了其中的十二种来作为镜相特技的辅助特技,包括: ·MERGECOPY ·MERGEPAINT ·NOTSRCCOPY ·NOTSRCERASE ·PATCOPY ·PATINVERT ·PATPAINT ·SRCAND ·SRCCOPY ·SRCERASE ·SRCINVERT ·SRCPAINT 6、屏幕帧定位 DynWC程序应具有定位屏蔽帧的能力,以便用户选择存储。可考虑双向定位功能,如果屏幕帧队列设置较大的话。 7、存储文件格式交换能力 DynWC以32位真彩TGA文件格式存储捕获的屏蔽帧。TGA格式是一种较为常见的位图交换格式,象PicturePublisher、PhotoStyler、Corel、PhotoPaint等常用的图象处理软件均能对它直接操作。 三、关键技术途径 1、获取捕获对象的设备描述表 (1)获取屏幕裁剪区域桌面窗口的设备描述表 HDC hDC; hDC=GetDC(NULL); 或 hDC=GetDC(GetDesktopWindow()); (2)获取可见的任意父窗口或其任意子窗口的设备描述表HDC hDC; hDC=GetWindowDC(hWindow); 这里hWindow为可见的任意父窗口或其任意子窗口句柄。 (3)获取可见的任意父窗口或其任意子窗口客户区的设备描述表; HDC hDC; hDC=GetDC(hWindow); 这里hWindow为可见的任意父窗口或其任意子窗口句柄。 (4)获取可见的任意父窗口或其任意子窗口的句柄; 用户选定窗口可根据窗口的标题作出决策,这就要求建立一窗口标题到窗口句柄的映射结构。我们定义该结构如下: const int MaxTitleChars=64; struct MapWindowsAndTitle{ HWND hWnd;//窗口句柄 LPSTR Title;//窗口标题 MapWindowAndTitle() //构造函数 { hWnd=NULL; Title=new char[MaxTitleChars]; lstrcpy(Title,"[None]"); //窗口标题初始化为[None] } MapWindowsAndTitle() //析构函数 { delete Title; } } 为了获取窗口标题到句柄的映射表,程序必须列举屏幕上所有的可见窗口。Window API提供了两个安全而高效的窗口枚举函数:EnumWindows函数枚举所有的父窗口,EnumWindows函数枚举某父窗口的所有子窗口。此两函数均要求一个枚举回调过程。由于此两函数的使用方法基本一致,在此我们仅以EnumWindows函数为例,通过枚举所有的父窗口来建立父窗口标题到窗口句柄的映射表。 有关的数据结构如下: int TotalParent=0;//记录当前父窗口个数 const int MaxParent=20;//最大父窗口个数 MapWindowAndTitle ParentWindowTitles[MaxParent]; //父窗口的窗口标题到窗口句柄的映射表 枚举回调过程如下: BOOL CALLBACK GetAllParent(HWND hParent,LPARAM) { LPSTR lpTemp; ParentWindowTitles[TotalParent].hWnd=hParent; lpTemp=ParentWindowTitles[TotalParent++].Title; GetWindowText(hParent,lpTemp,MaxTitleChars); if(!strcmp(lpTemp,"")||!IsWindowVisible(hParent)) TotalParent--; //要求有窗口标题并窗口可见return TRUE ; //必须返回TRUE值以枚举所有父窗口 } 在选择窗口对话框过程中调用EnumWindows函数的代码如下: BOOL FAR PASCAL SelectWindow (HWND hDlg,WORD Message,WPARAM,LPARAM) { switch(Message){ …… case WM_INITDIALOG: TotalParent=0; FARPROC lpParentProc; lpParentProc =MakeProcInstance(GetAllParent,hInstance); EnumWindows(lpParentProc,0); FreeProcInstance(lpParentProc); …… } ……} 有了窗口标题到窗口句柄的映射表,利用组合控制等来完成用户选择并获取窗口句柄就变得十分简单了。 2、创建兼容内存设备描述表并选入兼容位图对象 HDC DC;//要兼容的内存设备描述表 HDC hMemoryDC; //兼容内存设备描述表 HBITMAP hBitamp,hOldBitmap;//位图对象 int ScreenXSize,ScreenYSize;//屏幕尺寸 hMemoryDC=CreateCompatibleDC(hDC); //创建兼容内存设备描述表 ScreenXSize=GetSystemMetrics(SM_ CX-FULLSCREEN); //取屏幕宽 ScreenYSize=GetSystemMetrics(SM _ CY-FULLSCREEN); //取屏幕高 hBitmap=CreatCompatibleBitmap(hDC,ScreenX-Size,ScreenYSize); //创建兼容位图 hOldBitmap=SelectObject(hMemoryDC,hBitmap); //选入兼容位图 3、位块传输 位块传输BitBlt函数不仅提供了高效的位图传输手段,而且可以利用它实现种种简单的屏幕特技。 由于水平镜相的对应列相同、垂直镜相的对应行相同,因此可利用BitBlt函数每次传输一列或一行来快速实现镜相特技。对于对角镜相,则需分别作一次所有行、列的镜相传输,因为对角镜相可通过水平镜相和垂直镜相两步达到。使用该方法实现对角镜相仍比每次一个像素的传输要快得多。 dwRop光栅操作码可以用于镜相特技的辅助特技。例如,用SRCCOPY码实现通常的镜相,而用NOTSRC-COPY码则可以实现反相的镜相。 4、区域裁剪 DynWC利用所谓的"像皮矩形"来标识裁剪区域。实现"像皮矩形"需要用到光栅的二进制操作如R2_NOT求反操作,通过调用SetROP2函数设置。 为了实现能在用户域外设置"像皮矩形"的起始点,DynWC调用了SetCapture函数来全屏幕捕获鼠标输入。但在Windows NT的抢先式多任务环境下,Set-Capture函数并不能帮助在用户域外设置"像皮矩形"的起始点。 5、图像存储 DynWC采用32位真彩无压缩TGA格式存储屏幕帧,像素顺序是从左到右、从上到下。当然有兴趣的读者也可选用其它格式,这里便从略了。 四、界面设计 DynWC修改了系统菜单,以便最小化运行时也能操纵捕获。为便于用户了解捕获现状,在最小化运行时,DynWC将捕获对象的内容缩小成图标显示。 有自动跟踪方式下,程序产生一个弹出窗口,以显示捕获的内容,这有利于组织并方便地达到要求的特技效果。 五、结束语 DynWC是在Windows NT 3.5环境下用Borland C++4.5编译和测试通过。DynWC在Windows 3.1中西文环境下能完全正常工作。需要说明的一点是:DynWC并不能捕获通过特殊硬件显示在屏幕上的窗口或区域。例如,当用Intel公司的DVI卡播放数字视频时,视频图象并不能被DynWC所捕获。这也是觉的屏幕捕获软件所不能达到的。 限于篇幅,DynWC的程序代码不能一一给出。