📄 capturebmp.c
字号:
#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <unistd.h>#include <string.h>#include <Egui.h>#include "bmp.h"EGui_FBinfo Efbinfo;intwrite_file (const char* filename, size_t length,char * buffer){ int fd; /* Open the file. */ fd = open (filename, O_CREAT|O_RDWR|S_IRWXU); if (fd < 0) { printf ("create a new BMP %s file error\n",filename); return -1; } write (fd, buffer, length); /* Finish up. */ close (fd); return 0;}intmain(int argc, char **argv){ char * rgbbuf; int width,height; Ecolor * bgcolor; EGui_Window * ewindow; if (argc <2) { printf (" A 24 bits BMP capture program for Egui\n"); printf ("usage : %s filename\n",argv[0]); return; } if (Egui_open (&Efbinfo)) return ; bgcolor = malloc (sizeof ( Ecolor)); if (bgcolor == NULL) { printf ("malloc color ERROR\n"); return -1; } bgcolor->r = bgcolor->g = bgcolor->b = 0xcc; /* create window will initial color's pixel. */ ewindow = Egui_CreateWindow (&Efbinfo,0,0,Efbinfo.screen_width - 1, Efbinfo.screen_height - 1,bgcolor,EGUI_WINDOW_NORMAL); if (ewindow == NULL) { printf ("New windows failed\n"); Egui_close (); return 1; } /*do display windows*/ width = Efbinfo.screen_width ; height = Efbinfo.screen_height ; rgbbuf = (char *) malloc ( width * height * 3); if (rgbbuf == NULL) { printf ("Get a buffer for RGB error!\n"); return ; } Egui_getrgb (0,0,width,height,rgbbuf,ewindow); save_bmpbuf (width,height,rgbbuf,argv[1]); free(rgbbuf); Egui_CloseWindow (ewindow); free (bgcolor); Egui_close ();}int save_bmpbuf(int width,int height,char * rgbbuf, char * filename){ char *buffer; size_t length; int i,j; char pad_num; char *aBitmapBits; int tmpwidth; int head_size; BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih; pad_num = width * 3 %4==0? 0 : 4 - width * 3 %4; head_size = sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER); length = (width * 3 + pad_num ) * height + head_size ; /* new head */ bmfh.bfType = 0x4D42; /* BM */ bmfh.bfSize = length; bmfh.bfReserved1 = 0; bmfh.bfReserved2 = 0; bmfh.bfOffBits = head_size; bmih.biSize = 0x28 ; /* windows x BMP */ bmih.biWidth = width; bmih.biHeight = height; bmih.biPlanes = 1; bmih.biBitCount = 24; /* 24bits */ bmih.biCompression = 0; /* */ bmih.biSizeImage = (width * 3 + pad_num ) * height; //bmih.biXPelsPerMeter = ; // bmih.biYPelsPerMeter; bmih.biClrUsed = 0x1000000; /* 24bits */ buffer = (char * )malloc (length); if (buffer == NULL) { printf ("malloc file buffer error\n"); return -1; } memcpy (buffer,(void *)&bmfh,sizeof (BITMAPFILEHEADER)); memcpy (buffer + sizeof (BITMAPFILEHEADER),(void *)&bmih,sizeof (BITMAPINFOHEADER)); aBitmapBits = (char *)(buffer + head_size); for (j=0,i=height-1; j < height; j ++,i--) { //line copy memcpy(aBitmapBits + i * (width * 3 + pad_num), rgbbuf + j * width * 3,width * 3); } write_file(filename, length,buffer); free(buffer); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -