研究mgaview的源码的成果

最近几天没事就看mgaview的源码,看了几遍之后,发现它的主要工作原理比较简单,大致如下:

开始


打开图片文件


读取文件头


判断图片类型


使用相应的函数解码图片为数组


调用相应的函数将数组写入至屏幕


结束




源码文件不怎么多,也不是很复杂,并且,它的源码还分类别存放在不同的文件夹:
src/
src/input
src/output

mgaview的主程序源码当然就在src目录,h格式的文件只是声明了一些全局变量,还定义了一些宏。

input目录

该目录里的源码,是用于解码各种格式的图片文件,看文件名字就知道它具体是针对哪个格式的文件了,解码后,会得到以下数据:
图片的尺寸
图片的位深度
还会得到三个 位数组:
一个是存储每个像素点显示的红色( Red )的值
一个是存储每个像素点显示的绿色( Green )的值
一个是存储每个像素点显示的蓝色( Blue )的值
图片的尺寸决定这三个数组的长度。
只需要 红色 绿色 蓝色 这三种颜色就可以组合成任何颜色,学过初中物理的同学应该有印象。
可以参考这张截图:

如图所示,当红色为255,绿色和蓝色都为0的时候,这时的颜色是纯红色。
由此可知,当红、绿、蓝都为255的时候,会变成白色,0到255,颜色从深到浅。
那么,在学习机屏幕上画一张全屏白色的图就很容易了,只需要将三个数组全部赋值为255,并传给mgaview的相应函数既可显示。


C语言代码演示
unsigned char image_r[2]={255,255};
unsigned char image_g[2]={255,255};
unsigned char image_b[2]={255,255};
这三段代码表示的是两个像素点显示的颜色,内容都为255,也就是两个像素点都显示为白色。
每个颜色都有256种亮度,这样算来,每个像素点一共可以显示256*256*256= 16777 216种颜色,学习机的屏幕支持 26万色,而这 1600万色好像无法真正能完全显示。

由以上可以联想到:
我的学习机的屏幕的分辨率是320X240
320*240=76800个像素点
每个像素点由三个数组中对应的元素表示
而每个元素的长度都为1
76800*3*1=230400
之后
230400/1024=225KB
一张320*240的bmp图片,它的大小为225KB(忽略文件头信息,它会占一些空间),因为bmp是位图,如果你看到一张图片的大小恰好是225KB,那么,它可能就是bmp图片或者这种格式的图片是直接保存像素点数据的。
当然,这是针对于没有调色板的24位的BMP,24位的bmp是直接使用RGB,而有调色板的bmp,体积可能不会是225KB,它使用调色板中颜色索引值。

关于bmp图片,可以看百科词条:http://baike.baidu.com/view/7671.htm


output目录
顾名思义,output,输出,也就是显示的意思,将位数组显示到屏幕上,你可以看看里面的源码文件的内容,只有几个C源码文件和头文件;
其中mga_vfb.c里有个关键函数,它的原型是:void write_to_fb(uint8_t *r,uint8_t *g,uint8_t *b)
write_to_fb?写入至设备fb?fb就是framebuffer。
里面的r,g,b这三个指针就是指向传入的三个数组(解释可能不专业),这三个数组分别是表示每个像素点的绿三种颜色的深度,还有全局变量,所有函数共用的,并不是只传三个数组就可以了,全局变量中还有表示图片的宽度和高度的量。
其他的函数,看了一下,是处理图片缩放、旋转之类的函数,也就是修改数组的内容罢了。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值