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

📄 demo6.c

📁 一个嵌入式操作系统(microwindows)的源代码
💻 C
字号:
/* * Demonstrates loading a binary PPM file and displaying it in a window * as a Pixmap. *//* Comment this definition out if you don't want to use server side pixmaps *//* (it will be slower but will work on device drivers without bitblt) */#define USE_PIXMAPS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <nano-X.h>GR_WINDOW_ID window;	/* ID for output window */#ifdef USE_PIXMAPSGR_WINDOW_ID pmap;	/* ID for pixmap */#endifGR_GC_ID gc;		/* Graphics context */int width, height;	/* Size of image */unsigned char *data;	/* Local copy of image data */void do_exposure(GR_EVENT_EXPOSURE *event){	/* The window has been exposed so redraw it */#ifdef USE_PIXMAPS	GrCopyArea(window, gc, 0, 0, width, height, pmap, 0, 0, MWROP_SRCCOPY);#else	GrArea(window, gc, 0, 0, width, height, data, MWPF_RGB);#endif}void errorhandler(GR_EVENT *ep){	printf("Error (%s) code %d id %d", ep->error.name, 		ep->error.code, ep->error.id);	exit(1);}int main(int argc, char *argv[]){	unsigned char line[256];	GR_EVENT event;	FILE *infile;	int i, o;	unsigned char *p;	if(argc != 2) {		printf("Usage: demo6 <filename.ppm>\n");		exit(1);	}	if(!(infile = fopen(argv[1], "r"))) {		printf("Couldn't open \"%s\" for reading: %s\n", argv[1],						strerror(errno));		exit(2);	}	/* Read magic number (P6 = colour, binary encoded PPM file) */	if(!fgets(line, 256, infile)) goto truncated;	if(line[0] != 'P' || line[1] != '6') {		printf("Unsupported PPM type or not a PPM file.\n");		printf("Please supply a valid P6 format file (colour, with "			"binary encoding).\n");	}	/* Strip comments */	do {		if(!fgets(line, 256, infile)) goto truncated;	} while(line[0] == '#');	/* Read width and height */	sscanf(line, "%i %i", &width, &height);	/* Read the maximum colour value */	if(!fgets(line, 256, infile)) goto truncated;	sscanf(line, "%i", &i);	if(i != 255) {		printf("Truecolour mode only is supported\n");		exit(4);	}	/* Calculate how many bytes of image data there is */	i = width * height * 3;	/* Calculate how many bytes of data there will be after unpacking */	o = width * height * 4;	/* Allocate the space to store the data whilst it's being loaded */	if(!(data = malloc(o))) {		printf("Not enough memory to load image\n");		exit(5);	}	/* Read the data in and unpack it to RGBX format */	/* The lower byte isn't used so we don't set it to anything */	p = data;	while(o) {		if(fread(p, 1, 3, infile) != 3) goto truncated;		p += 4;		o -= 4;	}	/* We don't need the input file anymore so close it */	fclose(infile);	/* Register the error handler */	GrSetErrorHandler(errorhandler);	if(GrOpen() < 0) {		printf("Couldn't connect to Nano-X server\n");		exit(6);	}#ifdef USE_PIXMAPS	/* Create the pixmap to store the picture in */	pmap = GrNewPixmap(width, height, NULL);#endif	/* Create a graphics context */	gc = GrNewGC();#ifdef USE_PIXMAPS	/* Copy the image data into the pixmap */	GrArea(pmap, gc, 0, 0, width, height, data, MWPF_RGB);	/* We can free the image data now because it's stored in the pixmap */	free(data);#endif	/* Create a window to output the image to */	window = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, width, height, 0, 0, 0);	/* Select expose events so we can redraw the image when necessary */	GrSelectEvents(window, GR_EVENT_MASK_EXPOSURE |				GR_EVENT_MASK_CLOSE_REQ);	/* Make the window visible */	GrMapWindow(window);#ifdef USE_PIXMAPS	/* Paint the pixmap onto it */	GrCopyArea(window, gc, 0, 0, width, height, pmap, 0, 0,							MWROP_SRCCOPY);#else	GrArea(window, gc, 0, 0, width, height, data, MWPF_RGB);#endif	while(1) {		GrGetNextEvent(&event);		switch(event.type) {			case GR_EVENT_TYPE_EXPOSURE:				do_exposure(&event.exposure);				break;			case GR_EVENT_TYPE_CLOSE_REQ:				GrClose();				exit(0);		}	}	return 0;truncated:	printf("Error: File appears to be truncated\n");	exit(3);}

⌨️ 快捷键说明

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