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

📄 video.c

📁 C大程序 需要解压
💻 C
字号:
#define VGA256 0x13
#define TEXT_MODE 0x03

#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 200

unsigned char far *video_buffer = (char far *) 0xA0000000L;

typedef struct video_image_typ{
	int width, height;
	char far *buffer;
}
video_image, *video_image_ptr;

void Set_Video_Mode(int mode){
	union REGS inregs,outregs;

	inregs.h.ah = 0;
	inregs.h.al = (unsigned char)mode;
	int86(0x10, &inregs, &outregs);
}

void Plot_Pixel_Fast(int x, int y, char color){
	video_buffer[((y<<8)+(y<<6))+x] = color;
}

void VLine(int y1, int y2, int x, unsigned char color){
	unsigned int LineOffset, index;

	LineOffset = ((y1<<8)+(y1<<6))+x;
	for (index = 0; index <= y2-y1; index++){
		video_buffer[LineOffset] = color;
		LineOffset += 320;
	}
}

void HLine(int x1, int x2, int y, unsigned char color){
	_fmemset(&video_buffer[((y << 8) + (y << 6)) + x1], color, x2 - x1 + 1);
}

void BLine(int x0, int y0, int x1, int y1, unsigned char color){
	int dx, dy, x_inc, y_inc, error=0, index;
	unsigned char far *vb_start=video_buffer;

	vb_start = vb_start+((unsigned)y0<<6) + ((unsigned)y0<<8)+(unsigned)x0;
	dx = x1-x0;
	dy = y1-y0;
	if (dx>=0) x_inc=1;
		else {x_inc = -1; dx = -dx;}
	if (dy>=0) y_inc = 320;
		else {y_inc=-320; dy = -dy;}
	if (dx > dy)
		for (index=0; index<=dx; index++){
			*vb_start = color;
			error+=dy;
			if (error>dx){
				error-=dx;
				vb_start+=y_inc;
			}
			vb_start+=x_inc;
		}
		else{
			for (index=0; index<=dy; index++){
				*vb_start = color;
				error += dx;
				if (error>0){
					error-=dy;
					vb_start+=x_inc;
				}
				vb_start += y_inc;
			}
		}
}

void GetImage(int x0, int y0, int x1, int y1, video_image_ptr image){
	unsigned size;
	int i;

	if (y1 >= SCREEN_HEIGHT) y1 = SCREEN_HEIGHT - 1;
	if (x1 >= SCREEN_WIDTH) x1 = SCREEN_WIDTH - 1;
	size = (y1 - y0) * (x1 - x0);
	image->width = x1 - x0;
	image->height = y1 - y0;
	if ((image->buffer = (char far *)farmalloc(size)) == NULL){
		printf("Low memory for image.buffer!\n");
		getch();
		exit(1);
	}
	for (i = y0; i <= y1; i++)
		_fmemcpy(&image->buffer[(i - y0) * image->width], &video_buffer[i * SCREEN_WIDTH + x0], image->width);
}

void PutImage(video_image image, int x, int y){
	int i;

	for (i = 0; i < image.height; i++)
		_fmemcpy(&video_buffer[(y + i) * SCREEN_WIDTH + x], &image.buffer[i * image.width], image.width);
}

void clean_black(int x, int y, int dx, int dy){
	int i;

	for (i = 0; i < dy; i++)
		_fmemset(&video_buffer[(i + y) * SCREEN_WIDTH + x], 0, dx);
}

⌨️ 快捷键说明

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