|
1# bayji
对照先前我们对函数的应用,首先先看下函数的几个参数,x0对应的应该是和高度有关的某个坐标值,y0对应的应该是和宽度有关的某个坐标值,h应该是高度值,l应该是宽度值,最后的bmp[]肯定是图片数组。这样我们来看先前用的一条语句Paint_Bmp(0, 0, 320, 240, TQ_LOGO_320240);我们可以分析知道x0,y0应该是图片第一个像素点的起点位置,h,l所控制的是图片的大小,对应我们的屏幕,全屏都显示就是320x240,也就是说我们的屏h最大为320,l最大为240。
下面来分析函数内部,两个for循环完成的是对320x240个像素点的赋值。对于Paint_Bmp(0, 0, 320, 240, TQ_LOGO_320240)我们来分析:
当x0=0,y0=0的初值:先是y=0,x=0,即第一个点(由此知道我们把坐标系的原点定在屏幕显示的左上角屏幕右方为+x方向,屏幕下方为+y方向)然后依次是y=0,x=1…y=0的全部赋值完后再开始赋值y=1的,以此类推,先对第一行320个像素点赋值,然后完成对所有240行的全部像素点赋值。
下面一大段是干嘛的,具体我们来看,c = bmp[p+1] | (bmp[p]<<8) ;肯定是具体把图片数组的值经过处理赋给c,具体如何处理的先不管,然后是if语句,里面的SCR_XSIZE_TFT和SCR_YSIZE_TFT我们go to一下我们知道其实就是两个宏定义:
#define SCR_XSIZE_TFT (320)
#define SCR_YSIZE_TFT (240)
这说明我们在使用3.5寸屏幕的时候的,屏幕的像素边界值分别是320和240。
我们这就知道if语句其实就是在x,y坐标在屏幕范围之内,把每个c值赋给LCD_BUFFER[y0+y][x0+x]这个数组,这个数组包含了所有320x240个像素点。注意最后这个p = p + 2 ;我们联系前面的c = bmp[p+1] | (bmp[p]<<8)语句,我终于明白了这条语句的作用,就是让bmp[]数组每两位组成一个像素点,其中数组两个数前面的数左移8位作为16位色的高八位,后面的数作为低八位,赋值给c,按照逐行扫描的方式复制给屏幕的BUFFER,即实现了全屏显示一张图片。 |
|