纯C语言实现图片与动画

时间:2024-10-11 07:01:18

要想实现图片或动画,首先和我们先要知道如何画点、画线、画矩形
注意:编写完代码后实现效果需要回到Ubuntu虚拟机最原始的页面:
这条博客有详细讲解怎么进入原始页面:
/qq_53287780/article/details/127130458?spm=1001.2014.3001.5501
运行步骤:
1、在终端输入init 3 使终端回到最原始的状态
2、输入密码:每个人ubuntu的密码不一样;我的是1
3、登陆的用户名:
4、密码再输一遍:
5、原始Ubuntu的终端页面;
6、编译及运行:回到文件所在的路径
gcc编译
./运行
7、在原始终端输入 reboot/startx
就可以回到现在版本的Ubuntu界面)

进入正题:
第一步:
(已知条件:大屏幕由1176个像素点构成,小屏幕由800个像素点构成,图片大小为:宽:800

实现点的绘制

void draw_point(unsigned int *addr, int x, int y, unsigned int color)
{
   
	*(addr + 1176*y + x) = color;
}

实现线条的绘制

void draw_line(unsigned int *addr, int x, int y, int x1, int y1,unsigned int color)
{
   
	if(y == y1) //横线
	{
   
		while(x<=x1)
			draw_point(addr, x++,  y, color);
	}
	if(x == x1)
	{
   
		while(y<=y1)
			draw_point(addr, x,  y++, color);
	}
	if(x-x1 == y-y1) //45度
	{
   
		while(y<=y1)
			draw_point(addr, x++,  y++, color);
	}
}

实现矩形的绘制

void draw_rect(unsigned int *addr, int x, int y, int x1, int y1,unsigned int color)
{
   
	draw_line(addr, x,  y, x1, y, color);//-
	draw_line(addr, x1,  y, x1, y1, color);//|
	draw_line(addr, x,  y1, x1, y1, color);
	draw_line(addr, x,  y, x, y1, color);
}

最后来实现图片的绘制


void draw_bmp(unsigned int *addr, int x, int y, const char *bmpname)
{
   
	//1. 打开图片
	int fd = open(bmpname, O_RDONLY);
	if(-1 == fd)
	{
   
		perror("open bmp");
		return;
	}
	
	//2. 跳过54字节bmp头
	lseek(fd, 54, SEEK_SET);
	
	//3. 提取图像像素信息
	unsigned int buf[600]

相关文章