|  | 
 
| 在做2.2的时候发现x和y其实分别对应于屏幕的l(宽)和h(高)。 分析如下:
 显示kobe投篮的函数:Paint_Bmp(0, 0, 320, 240, kobeshot_320240);
 Paint_Bmp函数的定义为:
 void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])
 {
 int x,y;
 U32 c;
 int p = 0;
 
 for( y = 0 ; y < l ; y++ )
 {
 for( x = 0 ; x < h ; x++ )
 {
 c = bmp[p+1] | (bmp[p]<<8) ;
 
 if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
 LCD_BUFFER[y0+y][x0+x] = c ;
 
 p = p + 2 ;
 }
 }
 }
 可见h = 320,l = 240。矛盾一(h和l应该分别为240和320)
 使得
 for( y = 0 ; y < 240 ; y++ )
 {
 for( x = 0 ; x < 320 ; x++ )
 {
 c = bmp[p+1] | (bmp[p]<<8) ;
 
 if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
 LCD_BUFFER[y0+y][x0+x] = c ;
 
 p = p + 2 ;
 }
 }
 如果按照x和y分别为h和l,则上面的代码出现了矛盾二。
 而两个矛盾在一起又能够产生正确的结果(这个太强大了!!应该是负负得正这个原理吧!)。
 并且在LCD_TFT.h中可以找到x和y的定义
 #define SCR_XSIZE_TFT         (320)
 #define SCR_YSIZE_TFT         (240)
 这里将x和y分别看做宽和高。所以要修改代码才能对应起来,修改如下:
 void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])改为
 void Paint_Bmp(int x0,int y0,int l,int h,unsigned char bmp[])使得与赋给他的值相对应。
 还有两个for语句
 for( y = 0 ; y < l  ;y++ )
 for( x = 0 ; x < h ;x++ )改为
 for( y = 0 ; y < h ;y++ )
 for( x = 0 ; x < l  ;x++ )使得与x和y分别看做宽和高相对应。
 特此在这里说明下,希望作者能够看到并且验证下。如果将x和y理解错误难免会在写程序中造成不必要的麻烦。
 | 
 |