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

📄 makebmp.c

📁 一个嵌入式操作系统(microwindows)的源代码
💻 C
字号:
/* * Copyright (c) 1999 Greg Haerr <greg@censoft.com> * * Framebuffer data to .bmp file converter * * 10/4/1999 g haerr */#include <stdio.h>#include <unistd.h>#define BI_RGB		0L#define BI_RLE8		1L#define BI_RLE4		2L#define BI_BITFIELDS	3Ltypedef unsigned char	BYTE;typedef unsigned short	WORD;typedef unsigned long	DWORD;typedef long		LONG;#pragma pack(1)/* windows style*/typedef struct {	/* BITMAPFILEHEADER*/	BYTE	bfType[2];	DWORD	bfSize;	WORD	bfReserved1;	WORD	bfReserved2;	DWORD	bfOffBits;	/* BITMAPINFOHEADER*/	DWORD	BiSize;	LONG	BiWidth;	LONG	BiHeight;	WORD	BiPlanes;	WORD	BiBitCount;	DWORD	BiCompression;	DWORD	BiSizeImage;	LONG	BiXpelsPerMeter;	LONG	BiYpelsPerMeter;	DWORD	BiClrUsed;	DWORD	BiClrImportant;} BMPHEAD;#pragma pack()int		MakeBMP(FILE *ifp,FILE *ofp);intmain(int ac,char **av){	FILE	*ifp;	FILE	*ofp;	if(ac < 3) {		fprintf(stderr, "Usage: makebmp <infile> <outfile>\n");		exit(1);	}	ifp = fopen(av[1], "rb");	if(!ifp) {		fprintf(stderr, "Can't open file: %s\n", av[1]);		exit(1);	}	ofp = fopen(av[2], "wb");	if(!ofp) {		fprintf(stderr, "Can't create file: %s\n", av[2]);		exit(1);	}	if(!MakeBMP(ifp, ofp)) {		fprintf(stderr, "Conversion failed: %s\n", av[2]);		fclose(ofp);		unlink(av[2]);		exit(1);	}	fclose(ifp);	fclose(ofp);	return 0;}/* create a bmp file*/intMakeBMP(FILE *ifp, FILE *ofp){	BMPHEAD	bmp;	int	i, j;	int	cx, cy, extra, bitdepth, ncolors;	cx = 640;	cy = 480;	extra = (cx + 3) & 3;	bitdepth = 8;	if(bitdepth <= 8)		ncolors = 1<<bitdepth;	else ncolors = 0;	memset(&bmp, 0, sizeof(bmp));	bmp.bfType[0] = 'B';	bmp.bfType[1] = 'M';	bmp.bfSize = sizeof(bmp) + ncolors*4 + (long)cx*cy;	bmp.bfOffBits = sizeof(bmp) + ncolors*4;	bmp.BiSize = 40;	bmp.BiWidth = cx;	bmp.BiHeight = cy;	bmp.BiPlanes = 1;	bmp.BiBitCount = bitdepth;	bmp.BiCompression = BI_RGB;	//bmp.BiSizeImage = ??;	bmp.BiClrUsed = ncolors;	bmp.BiClrImportant = ncolors;	/* write header*/	fwrite(&bmp, sizeof(bmp), 1, ofp);	/* write palette*/	if(bitdepth <= 8) {		for(i=0; i<ncolors; i++) {			unsigned char r, g, b;			r = getc(ifp);			g = getc(ifp);			b = getc(ifp);			putc(b, ofp);			putc(g, ofp);			putc(r, ofp);			putc(0, ofp);		}	}	/* write image data, upside down ;)*/	for(i=cy-1; i>0; --i) {		long base = sizeof(bmp) + ncolors*4 + (long)i*cx;		fseek(ofp, base, SEEK_SET);		for(j=0; j<cx; ++j)			putc(getc(ifp), ofp);		for(j=0; j<extra; ++j)			putc(0, ofp);		/* DWORD pad each line*/	}	return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -