guguibin1988 发表于 2010-8-4 16:36:20

裸奔2.2玩转LCD屏幕显示中发现的矛盾:x和y与屏幕方向对应的问题

在做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 | (bmp<<8) ;

                        if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
                                LCD_BUFFER = 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 | (bmp<<8) ;

                        if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
                                LCD_BUFFER = 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理解错误难免会在写程序中造成不必要的麻烦。
页: [1]
查看完整版本: 裸奔2.2玩转LCD屏幕显示中发现的矛盾:x和y与屏幕方向对应的问题