天嵌 ARM开发社区

 找回密码
 注册
查看: 2014|回复: 0

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

[复制链接]
guguibin1988 发表于 2010-8-4 16:36:20 | 显示全部楼层 |阅读模式
在做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理解错误难免会在写程序中造成不必要的麻烦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-20 04:11 , Processed in 2.033529 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表