Windows Mobile下快速截屏的一种方法

简介: WinCE下截屏的方法有很多种,这里介绍一种利用GAPI实现的方法。GAPI是Game API的缩写,它提供了一系列函数,可以直接对屏幕缓冲区进行读/写访问。虽然现在逐渐被DirectX Mobile取代,但自从2000年首次应用在PPC上后,几乎所有的移动设备上都能看见它。

    WinCE下截屏的方法有很多种,这里介绍一种利用GAPI实现的方法。GAPI是Game API的缩写,它提供了一系列函数,可以直接对屏幕缓冲区进行读/写访问。虽然现在逐渐被DirectX Mobile取代,但自从2000年首次应用在PPC上后,几乎所有的移动设备上都能看见它。GAPI主要应用于游戏开发,但也不仅限于此。下面就介绍一种在WM下如何利用GAPI快速截取屏幕的方法。

 1        struct  {
 2            BITMAPINFOHEADER bmih;
 3            RGBQUAD rgq[ 256 ];
 4       } bmi;
 5       BYTE  * pLCDBuffer  =  NULL;
 6       BITMAPFILEHEADER bmfHdr;
 7       HANDLE hFile;
 8       DWORD dwWritten;
 9       DWORD dwFrameBufferSize;
10       
11       GXOpenDisplay(NULL, NULL);
12       g_DisplayProperties  =  GXGetDisplayProperties();
13       pLCDBuffer  =  (PBYTE)GXBeginDraw();
14       dwFrameBufferSize  =  g_DisplayProperties.cxWidth * g_DisplayProperties.cyHeight * (g_DisplayProperties.cBPP >> 3 );
15   
16       ZeroMemory( & bmi,  sizeof (bmi));
17       bmi.bmih.biSize  =   sizeof (BITMAPINFOHEADER);
18       bmi.bmih.biWidth  =  g_DisplayProperties.cxWidth;
19       bmi.bmih.biHeight  =   - g_DisplayProperties.cyHeight;
20       bmi.bmih.biPlanes  =   1 ;
21       bmi.bmih.biBitCount  =  (WORD)g_DisplayProperties.cBPP;
22       bmi.bmih.biCompression  =  BI_BITFIELDS;
23        * (DWORD  * )( & bmi.rgq[ 0 ])  =   0xF800 ;
24        * (DWORD  * )( & bmi.rgq[ 1 ])  =   0x07E0 ;
25        * (DWORD  * )( & bmi.rgq[ 2 ])  =   0x001F ;
26   
27       ZeroMemory( & bmfHdr,  sizeof (BITMAPFILEHEADER));
28       bmfHdr.bfType  =   0x4d42 ;
29       bmfHdr.bfOffBits  =   sizeof (BITMAPFILEHEADER)  +   sizeof (BITMAPINFOHEADER)  +   sizeof (DWORD) * 3 ;
30       bmfHdr.bfSize  =  bmfHdr.bfOffBits  +  dwFrameBufferSize;
31   
32       hFile  =  CreateFile(_T( " \\1.bmp " ), GENERIC_WRITE,  0 , NULL, CREATE_ALWAYS,NULL, NULL);
33        if  (INVALID_HANDLE_VALUE  !=  hFile)
34       {
35           WriteFile(hFile, (LPSTR) & bmfHdr,  sizeof (BITMAPFILEHEADER),  & dwWritten, NULL);
36           WriteFile(hFile, (LPSTR) & (bmi.bmih),  sizeof (BITMAPINFOHEADER)  +   sizeof (DWORD) * 3 & dwWritten, NULL);
37           WriteFile(hFile, (LPSTR)pLCDBuffer, dwFrameBufferSize,  & dwWritten, NULL);
38           CloseHandle(hFile);
39       }
40      
41       GXEndDraw();
42       GXCloseDisplay();

 

 

目录
相关文章
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
3693 4
|
8月前
|
Ubuntu Unix Linux
在Windows上轻松安装和使用Ubuntu的方法详解
继续点击“Continue”按钮以继续安装流程,随后选择清理磁盘并安装操作系统的选项。 接下来,在安装过程中,你需要选择时区。为了与你的地理位置相匹配,请选择中国上海作为你的时区设置。 在安装过程中,你还需要设置计算机的名称以及账号密码。请务必牢记这些信息,因为它们将作为你登录系统的凭证。
|
9月前
|
Linux Windows
Windows 10/11从官网下载ISO的方法
本文介绍了两种从微软官网下载Windows 10/11 ISO镜像的方法。一是通过修改浏览器User Agent为Linux系统,使官网提供ISO下载链接;二是使用UUPDUMP工具,从官网下载并转换为ISO格式,支持最新开发版,操作简便。
|
7月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1113 0
|
存储 安全 虚拟化
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
2163 0
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
637 1
|
存储 缓存 安全
硬盘数据恢复:恢复硬盘数据的9个实用方法(Windows版)
无论是工作文档、家庭照片,还是其他珍贵的数字资产,数据丢失总是一件让人头疼的事情。然而,当硬盘发生问题时,不必过于慌张——只要正确应对,许多数据都可以被成功恢复。本文将从常见数据丢失原因到具体恢复方法,为您提供全面的硬盘数据恢复指导。
|
弹性计算 数据安全/隐私保护 Windows
阿里云国际版无法远程连接Windows服务器的排查方法
阿里云国际版无法远程连接Windows服务器的排查方法
|
安全 Windows
Windows系统实现exe服务注册的方法都有哪些?
【10月更文挑战第5天】Windows系统实现exe服务注册的方法都有哪些?
2179 0
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
377 0