⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 capturebmp.c

📁 EGui是一个开源的图形系统软件,类似于QT/Embedded、GTK-FB、MicroWindow。目标是嵌入式平台整合解 决方案。基于Linux Framebuffer 设备驱动上实现。有完
💻 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 + -