5169|16

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

在WIN CE机器上的截屏功能怎么做 [复制链接]

小弟想在WIN CE平台的机器下做个截取屏幕图象的功能,然后把图象保存到指定的文件夹,文件名称是机器上的时间日期。应该怎么做啊?麻烦写出代码好吗?小弟是菜鸟麻烦大家了。尽量写详细点有注释的。我好学习。

最新回复

我看看  详情 回复 发表于 2010-3-19 15:46
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
        HDC hScrDC,   hMemDC;         //屏幕和内存设备描述表      
        HBITMAP hBitmap,   hOldBitmap;//位图句柄      
        int nX,   nY,   nX2,   nY2;   //选定区域坐标      
        int nWidth,   nHeight;        //位图宽度和高度      
        int xScrn,   yScrn;           //屏幕分辨率   
   
        //为屏幕创建设备描述表   
        hScrDC   =   CreateDC(L"DISPLAY",   NULL,   NULL,   NULL);   
       
        //         CPaintDC dc(this);
        //         hScrDC = dc.GetSafeHdc();
        //       
   
        //   获得屏幕分辨率   
        xScrn   =   GetDeviceCaps(hScrDC,   HORZRES);   
        yScrn   =   GetDeviceCaps(hScrDC,   VERTRES);   
   
        //   确保选定区域不为空矩形   
        if   (!lpRect   ||   IsRectEmpty(lpRect))   
        {   
                nX   =   0;   
                nY   =   0;   
                nX2   =   xScrn;   
                nY2   =   yScrn;   
        }   
        else   
        {   
                //   获得选定区域坐标   
                nX   =   lpRect->left;   
                nY   =   lpRect->top;   
                nX2   =   lpRect->right;   
                nY2   =   lpRect->bottom;   
               
                //确保选定区域是可见的   
                if   (nX   <   0) nX   =   0;   
                if   (nY   <   0) nY   =   0;   
                if   (nX2   >   xScrn) nX2   =   xScrn;   
                if   (nY2   >   yScrn) nY2   =   yScrn;   
        }   
        nWidth  = nX2 - nX;   
        nHeight = nY2 - nY;          
   
        //为屏幕设备描述表创建兼容的内存设备描述表   
        hMemDC  =   CreateCompatibleDC(hScrDC);   
   
        //创建一个与屏幕设备描述表兼容的位图   
        hBitmap =   CreateCompatibleBitmap (hScrDC, nWidth, nHeight);   
   
        //把新位图选到内存设备描述表中   
//        hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);   
   
        //   把屏幕设备描述表拷贝到内存设备描述表中   
//        BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);  
   
        //TextOut(hMemDC,100, 100,L"Rigel",sizeof("Rigel"));   
   
        BYTE *lpBitmapBits = NULL;

        BITMAPINFO RGB24BitsBITMAPINFO;
        ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO));
        RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    RGB24BitsBITMAPINFO.bmiHeader.biWidth = nWidth;
    RGB24BitsBITMAPINFO.bmiHeader.biHeight = nHeight;
    RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1;
    RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24;

        //得到屏幕位图的句柄   
//        hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);   

    HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO,
        DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);
        HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);
       
        // copy the screen dc to the memory dc
        BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);
       
        //if you only want to get the every pixel color value,
        //you can begin here and the following part of this function will be unuseful;
        //the following part is in order to write file;
       
        //bimap file header in order to write bmp file
        BITMAPFILEHEADER bmBITMAPFILEHEADER;
        ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));
        bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp
    bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((nWidth*nHeight)*3); ///3=(24 / 8)
       
        //write into file
        FILE *mStream = NULL;       
        if((mStream = fopen(filename, "wb")))
        {  
                //write bitmap file header
                fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
                //write bitmap info
                fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
                //write bitmap pixels data
                fwrite(lpBitmapBits, 3*nWidth*nHeight, 1, mStream);
                //close file
                fclose(mStream);
        }
   
        //清除     
        DeleteDC(hScrDC);   
        DeleteDC(hMemDC);   
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
文件名自己处理,这个截取全屏. 如果屏幕比较大 如800*600 ,那么保存到文件需要点时间一般2-3秒.
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
EVC中编译通不过,不知道为什么。说是filename这个没有定义,还有一个int *错误。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼上也太懒了吧!
没定义你自己不会定义吗?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主,已经够好运气的了。
等待你的好消息。^_^
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

7
 
嗬嗬,
lz总不能让别人把代码全部给你写完整吧。

那你还能学到些什么呢?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
好吧我的错,再多问句。

我选则保存文件的路径和文件的名称是不是在下面这里写
//write into file
FILE *mStream = NULL;
if((mStream = fopen(filename, "wb"))) //这里是文件名称,文件路径是在那里写呢?
{   
//write bitmap file header
fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
//write bitmap info
fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
//write bitmap pixels data
fwrite(lpBitmapBits, 3*nWidth*nHeight, 1, mStream);
//close file
fclose(mStream);
}
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
filename里包含了路径和名称

sample:

filename = "\\storage card\\screen.bmp"
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
等看楼主的结果。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
代码给的够详细的了,应该不会有问题了。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

12
 
不错,大家都很热心了,自己还要努力
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 
关注 接分
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
好像没那么简单,呵呵.
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

15
 
有问题请先GOOGLE,BAIDU
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
学习了!这个真的不错
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

17
 
我看看
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表