3027|5

95

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怎样把PDA的屏幕捕捉下来保存JPG格式? [复制链接]

如题:
要用到哪些函数?

最新回复

晕,这个例子我在网上早找到了,是EVC用的 ,但不知道怎么转成C#的   详情 回复 发表于 2007-2-2 10:01
点赞 关注

回复
举报

51

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
可以想办法用Graphics获取当前屏幕的,生成BITMAP,可是,要转成文件,好象没有办法。
我已经研究BITMAP保存问题好几天了
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我的BLOG中有 可是没有转JPG的   只能转BMP  我提供一个函数即可高顶
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

4
 
抓取屏幕可以用下面代码
void SaveScreen(const char *filename)
{
        HDC  hScrDC, hMemDC;         
    int  width, height;
       
        //the pointer will save all pixel point's color value
        BYTE  *lpBitmapBits = NULL;
       
        //creates a device context for the screen device
    hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
       
        //get the screen point size
    width = GetDeviceCaps(hScrDC, HORZRES);
    height = GetDeviceCaps(hScrDC, VERTRES);
       
    //creates a memory device context (DC) compatible with the screen device(hScrDC)  
    hMemDC = CreateCompatibleDC(hScrDC);
       
        //initialise the struct BITMAPINFO for the bimap infomation,
        //in order to use the function CreateDIBSection
        //on wince os, each pixel stored by 24 bits(biBitCount=24)
        //and no compressing(biCompression=0)
    BITMAPINFO RGB24BitsBITMAPINFO;
    ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO));
    RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    RGB24BitsBITMAPINFO.bmiHeader.biWidth = width;
    RGB24BitsBITMAPINFO.bmiHeader.biHeight = height;
    RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1;
    RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24;
       
        //use the function CreateDIBSection and SelectObject
        //in order to get the bimap pointer : lpBitmapBits
    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, width, height, hScrDC, 0, 0, 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 + ((width*height)*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*width*height, 1, mStream);
                //close file
                fclose(mStream);
        }
       
        //delete
        DeleteObject(hMemDC);
        DeleteObject(hScrDC);
        DeleteObject(directBmp);
        DeleteObject(previousObject);
}

保存成BMP,可以用IJG的JpegLib。
 
 
 

回复

56

帖子

3

TA的资源

一粒金砂(初级)

5
 
好东西,看看.
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
晕,这个例子我在网上早找到了,是EVC用的 ,但不知道怎么转成C#的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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