嵌入式linux截屏代码,嵌入式linux截屏程序

基于网上一个代码改的。

源地址:http://blog.csdn.net/z1179675084/article/details/14645359

// 注意,由于fb_bpp = 16的情况没用到,以下修改后的代码只调整了fb_bpp不为16的情况

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static unsigned int capframe = 0;

static unsigned char filename[30];

FILE *bmpFile;

unsigned char bmp_head_t[] = {

0x42,0x4d,0x42,0x58,0x02,0x00,0x00,0x00,0x00,0x00,

0x42,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xf0,0x00,

0x00,0x00,0x40,0x01,0x00,0x00,0x01,0x00,0x10,0x00,

0x03,0x00,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0xe0,0x07,

0x00,0x00,0x1f,0x00,0x00,0x00

};

static int fb_bpp;

//14byte

typedef struct

{

char cfType[2]; /* 文件类型, 必须为 "BM" (0x4D42)*/

unsigned int cfSize; /* 文件的大小(字节) */

unsigned int cfReserved; /* 保留, 必须为 0 */

unsigned int cfoffBits; /* 位图阵列相对于文件头的偏移量(字节)*/

}__attribute__((packed)) BITMAPFILEHEADER; /* 文件头结构 */

//40byte

typedef struct

{

unsigned int ciSize; /* size of BITMAPINFOHEADER */

unsigned int ciWidth; /* 位图宽度(像素) */

unsigned int ciHeight; /* 位图高度(像素) */

unsigned short ciPlanes; /* 目标设备的位平面数, 必须置为1 */

unsigned short ciBitCount; /* 每个像素的位数, 1,4,8或24 */

unsigned int ciCompress; /* 位图阵列的压缩方法,0=不压缩 */

unsigned int ciSizeImage; /* 图像大小(字节) */

unsigned int ciXPelsPerMeter;/* 目标设备水平每米像素个数 */

unsigned int ciYPelsPerMeter;/* 目标设备垂直每米像素个数 */

unsigned int ciClrUsed; /* 位图实际使用的颜色表的颜色数 */

unsigned int ciClrImportant; /* 重要颜色索引的个数 */

}__attribute__((packed)) BITMAPINFOHEADER; /* 位图信息头结构 */

BITMAPFILEHEADER FileHead;

BITMAPINFOHEADER InfoHead;

unsigned char bmp_head[54];

static int fb_fp = -1;

static char *fb_addr = NULL;

int width=0;

int height=0;

static inline int fb_init(void)

{

int dev_fp = -1;

int fb_size;

struct fb_var_screeninfo vinfo;

dev_fp = open("/dev/fb0", O_RDWR);

if (dev_fp < 0) {

perror("/dev/fb0");

return -1;

}

if (ioctl(dev_fp, FBIOGET_VSCREENINFO, &vinfo)) {

printf("Error reading variable information.\n");

exit(1);

}

width=vinfo.xres;

height=vinfo.yres;

fb_bpp=vinfo.bits_per_pixel;

//if(fb_bpp==24) fb_bpp=32;

fb_size=width*height*fb_bpp/8;

if ((fb_addr = (char*)mmap(0, fb_size,

PROT_READ | PROT_WRITE, MAP_SHARED, dev_fp, 0)) < 0) {

perror("mmap()");

return -1;

}

printf("%dx%d bpp:%d mmaped 0x%08x\n",width,height,fb_bpp,fb_addr);

return dev_fp;

}

void writeImageToFile(unsigned int size)

{

sprintf(filename,"/mnt/sd/0%d.bmp",capframe);

bmpFile=fopen(filename, "w+");

if(fb_bpp == 16)

fwrite(bmp_head_t,1,66,bmpFile);

else

{

fwrite(&FileHead,1,14,bmpFile);

fwrite(&InfoHead,1,40,bmpFile);

}

//fwrite(fb_addr,1,size,bmpFile);

int h = 0;

for (h = height-1; h > 0; h--)

{

fwrite(fb_addr + h * width*fb_bpp/8, 1, width*fb_bpp/8, bmpFile);

}

fclose(bmpFile);

printf("%s\n", filename);

}

int main(int argc, char *argv[])

{

unsigned int i = 10;

unsigned long size = 0;

fb_fp = fb_init();

size=width*height*fb_bpp/8;

if (argc < 2)

{

printf("run like 'prntscr num', num is bmpname'\n");

return 0;

}

capframe = atoi(argv[1]);

if(fb_bpp==16){

*((unsigned int*)(bmp_head_t+18)) = width;

*((unsigned int*)(bmp_head_t+22)) = height;

*((unsigned short*)(bmp_head+28)) = 16;

}else{

FileHead.cfType[0] = 'B';

FileHead.cfType[1] = 'M';

unsigned int tmp = width*height*fb_bpp/8;+54;

FileHead.cfSize = tmp;

FileHead.cfoffBits = 54;

InfoHead.ciSize = 40;

InfoHead.ciWidth = width;

InfoHead.ciHeight = height;

InfoHead.ciBitCount = 32;

InfoHead.ciCompress = 0;

InfoHead.ciSizeImage = size;

}

//while(i--)

{

writeImageToFile(size);

}

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB分布式(分片存储)部署

分别开启一个Config和两个ShardD:\mongodb1\bin\mongod --configsvr --dbpath D:\mongodb1\db\ --port 27020D:\mongodb2\bin\mongod --dbpath D:\mongodb2\db\ --port 27021D:\mongodb3\bin\mongod --dbpath D:\mongodb3\db\ --port 27022启动mongos(Sharding controller分片控…

(转)找回vss超级管理员密码

原文&#xff1a;http://www.cnblogs.com/446557021/archive/2011/01/05/1926213.html 如果忘记了VSS管理员密码&#xff0c;打开vss数据库所在的文件夹&#xff0c;打开data目录&#xff0c;找到um.dat文件&#xff0c;用编辑器打开编辑它&#xff0c;从offset 80的55 55 开始…

MongoDB文件操作(支持大于4M数据)

// MongoDB连接串&#xff0c;以[mongodb://]开头。这里&#xff0c;我们连接的是本机的服务string connectionString "mongodb://localhost";// 连接到一个MongoServer上MongoServer server MongoServer.Create(connectionString);// 打开数据库testdbMongoDataba…

linux 压缩排除某个文件夹,linux tar压缩排除 某类型文件 某个文件夹

排除某类型文件测试 生成10个.log文件再生成10个.txt文件touch {1..10}.logtouch {1..10}.txt打包并排除 log结尾的文件tar -zcvf 1.tar –exclude*.log . 结论tar -tvf 1.tar rwxr-xr-x root/root 0 2018-10-26 02:45 ./-rw-r–r– root/root 0 2018-1…

oracle之trunc(sysdate)

--截取后得到的仍为date数据类型 select trunc(sysdate) from dual;--2017-03-13 00:00:00select trunc(sysdate1) from dual;--2017-03-14 00:00:00 加一天 select trunc(sysdate,yyyy) from dual;--2017-01-01 00:00:00select trunc(sysdate,MM) from dual;--2017-03-01 00:0…

VS2010 C++下编译调试MongoDB源码 r2.2.2

编译下载mongodb-src-r2.2.2用VS2010打开mongodb-src-r2.2.2\src\mongo\db\db_10.sln编译mongod项目调试先创建数据库文件夹"D:\mongodb\db"设置调试参数--dbpathD:\mongodb\dbF5运行调试

linux如何记录测试时长,如何测试Linux命令运行时间?

如何测试Linux命令运行时间&#xff1f;良许在工作中&#xff0c;写过一个 Shell 脚本&#xff0c;这个脚本可以从 4 个 NTP 服务器轮流获取时间&#xff0c;然后将最可靠的时间设置为系统时间。因为我们对于时间的要求比较高&#xff0c;需要在短时间内就获取到正确的时间。所…

hihocoder offer收割编程练习赛8 B 拆字游戏

思路&#xff1a; 模拟&#xff0c;dfs。 注意题目中的trick&#xff0c;输出一块的时候不要把其他块也输出了。 实现&#xff1a; 1 #include <cstring>2 #include <iostream>3 #include <cstdio>4 #include <algorithm>5 using namespace std;6 7 ch…

linux date 常用格式,5、总结Linux常用命令使用格式,并用实例说明。例如echo、screen、date、ifconfig、export等命令...

COMMAND [OPTIONS...] [ARGUMENTS...]命名 [选项...] [参数...]echo命令功能&#xff1a;显示字符语法&#xff1a;echo [-neE] [字符串]选项&#xff1a;-E (默认)不支持 \ 解释功能-n 不自动换行-e 启用 \ 字符的解释功能显示变量echo "$VAR_NAME" 变量会替换&…

VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

编译mongodb-src-r2.2.2出现以下问题LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏这个是由于日志文件引起的&#xff0c;可以将项目\属性\配置属性\清单工具\输入和输出\嵌入清单&#xff1a;原来是“是”&#xff0c;改成“否”。 或者将项目\属性\配置…

软件工程概论个人作业02(四则运算2)

1、设计思想&#xff1a; 在四则运算1的基础上&#xff0c;多加了几个要求&#xff0c;是否有乘除法可以通过不同的选择然随机生成符号的函数有时候生成两个数字对应加减&#xff0c;有时候生成四个数对应加减乘除&#xff1b;括号没有实现&#xff1b;数值范围通过一个函数实现…

linux下怎么将html换成pdf,如何在Linux上使用PHP将HTML/CSS转换为PDF

我一直试图将html页面转换为PDF&#xff0c;但没有任何运气&#xff0c;我尝试使用wkhtmltopdf(http://code.google.com/p/) wkhtmltopdf /)和虽然下面的命令在终端正确执行由相同的开发者(http://code.google.com/p/wkhtmltopdf/wiki/IntegrationWithPhp)中提供的PHP类&#x…

javascript 类型及类型判断

js中的类型&#xff1a; 标准类型&#xff1a;Number、String、Boolean、Null、Undefined 内置对象类型&#xff1a;Function、Array、Date、RegExp、Math、JSON... 类型识别&#xff1a; 1、typeof&#xff1a; 可以识别标准类型&#xff08;Null、Undefined除外&#xf…

linux的yum详解,Linux之YUM 详解

一、yum是什么yum Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.它能便于管理大量系统的更新问题二、yum 的运用格式及常用参数yum [option] "包名"有些记不住的包名 可以使用通配符* 来一次安装多个前端一直的软…

windows 8 安装iis .net 3.5

安装iis要一部分一部分点&#xff08;有些是需要更新包的&#xff09;.net 3.5安装1.将Win8镜像加载到虚拟光驱&#xff1b;或者将 win8 刻录好的光盘插入光驱&#xff1b;2.使用Windows键X,调出命令菜单&#xff0c;选择 命令提示符(管理员)&#xff1b;3.敲入如下命令&#x…

tableview直接滚动至最后一行

类似聊天界面&#xff0c;tableview应该直接显示在最后一行&#xff0c;并且不应该有滚动的出现。 在网上查了很久&#xff0c;直接滚动至最后一行很容易实现&#xff0c;有两种方法比较好。 1. 调用scrollToRowAtIndexPath方法 -(void) scrollBottom{if ([self.messageData co…

c语言两个字符串比较,将两个字符串s1和s2比较,如果s1s2,数组编程:将2个字符串s1和s2比较。若s1s2输出1;若s1=s2,输出0;若s1s2,输出-1(不能用strcmp函数)...

满意答案zxd8611032014.04.15采纳率&#xff1a;55% 等级&#xff1a;9已帮助&#xff1a;563人#include<iostream.h>#include<string.h>int min(int a,int b){return ((a<b)?a:b);}void main(){char a[1000],b[1000];int lena,lenb,i,t,res,flag0;cin>&…