最近在学习ucgui。因为以前看过些linux内核代码,现在看这个代码
幸福多了。函数调用层次不多,用souceinsight很容易追踪完。这对于想了解内部实现原理
的人来说,算是学习中的万幸了。
昨天看了ucgui的内存分配,本想定些心得,但一看网上,已经有人做过了。我就贴个资源
http://download.youkuaiyun.com/detail/yongan1006/5299299
书归正传 ucgui画bitmap的过程
1.函数调用过程:
GUI_DrawBitmap( )------>GL_DrawBitmap( )------>LCD_DrawBitmap( )------>
LCDDEV_L0_DrawBitmap( )------>DrawBitLineXpp( )------>SETPIXEL( )
2.说明
2.1 ucgui经过一层层的参数检查和转换,最终分成一条一条线,然后再将单个像素
画出来。
2.2 bitmap定义过程
先定义个GUI_COLOR 数组,说明palette(调色板)中支持的颜色
再定下定义一个palette结构体,说明支持的颜色入口及是否透明
接着定义了一个unsigned char数组,用来存储图片的颜色信息
最后定义一个GUI_BITMAP,指出图片的入口信息,调色板的入口信息,大小等。
2.3 unsigned char数组信息和调色板上的颜色有什么关系呢?
首先ucgui将调色板上的颜色转换成索引颜色,所有的颜色转换成索引颜色后不会超过256
不会超过256的原因,是因为转换的算法关系。以下转换成索引颜色代码
GL_DrawBitmap( ):pTrans=LCD_GetpPalconvTable(pBitmap->pPal);
然后SETPIXEL( ):SETPIXEL( x,y,*(pTrans + pixel));
上面的pixel即是图片的unsigned char数组中的数值。
由此可见,unsigned char数组信息描述的是 调色板上的颜色数组中的第几个数。
即如果unsigned char数组中有一个数0x05,那么照片这个地方的颜色就调色板上的颜色数组
GUI_COLOR_ARRAY[5]处描述颜色的索引颜色。