要实现LCD字幕的平行移动有什么高效的处理方法

[复制链接]
 楼主| 我是土匪 发表于 2009-11-6 20:53 | 显示全部楼层 |阅读模式
要实现LCD字幕的平行移动有什么高效的处理方法?

难道每次整屏数据在原位置右移一点再重刷一次,擦出上次留下的痕迹?关于屏幕左右边缘怎么处理?
与时俱进 发表于 2009-11-6 21:03 | 显示全部楼层
如果显示缓存的地址可以指定,那么才能想出办法,否则,只有整屏刷新了,个人愚见。
xwj 发表于 2009-11-6 21:13 | 显示全部楼层
首先,要看x方向坐标的最小单位是多少,是一点还是8点;
然后,还要看是否需要保留背景、是否需要保证背景正确

至于移位,倒是很小的问题
 楼主| 我是土匪 发表于 2009-11-6 21:19 | 显示全部楼层
洗碗机说的X最小单位是步进单位吧,这个看效果,最好可调的参数。

背景是单一颜色
xwj 发表于 2009-11-6 21:22 | 显示全部楼层
不是步进间隔,而是说屏的控制器的数据排列,比如是否一个直接对应横向8点
与时俱进 发表于 2009-11-6 21:49 | 显示全部楼层
哈哈,洗碗机!
就是问一个点对应缓存的是1bit、1byte or 3 bytes,是不是这样洗碗机同志?
 楼主| 我是土匪 发表于 2009-11-6 21:52 | 显示全部楼层
TFT  RGB 565


打算一帧一帧刷过去
neuq521 发表于 2009-11-7 12:16 | 显示全部楼层
看一下屏的驱动芯片的资料,找找有没有现成的命令,
 楼主| 我是土匪 发表于 2009-11-10 09:24 | 显示全部楼层
没有这种命令
wangkj 发表于 2009-11-11 08:27 | 显示全部楼层
设置起始扫描指针。
avr32 发表于 2009-11-12 17:07 | 显示全部楼层
看你用什么软件,最好的方法是用定时器,按视觉效果隔一定时间移动一次.
avr32 发表于 2009-11-12 17:14 | 显示全部楼层
如果是CE系统,交给控件处理,把控制隔一定时间移动一下就会产生这样的效果了
 楼主| 我是土匪 发表于 2009-11-14 16:05 | 显示全部楼层
一帧一帧刷的,效果不是很流畅,但是boss觉得可以。
amtek 发表于 2009-11-23 16:47 | 显示全部楼层
最简单的办法就是改屏幕左上角的起始地址,实现滚屏效果。
liuwei0908 发表于 2009-12-26 01:34 | 显示全部楼层
Bitblt+MemDC
Fe_ARM 发表于 2009-12-26 14:36 | 显示全部楼层
我要看你图像变化的快慢是否有要求
k3342637 发表于 2010-1-6 15:24 | 显示全部楼层
我也遇到这个问题啊,我要显示的是波形,还有背景,除了整平的刷还有别的方法不啊~~~
irzn 发表于 2010-1-25 21:57 | 显示全部楼层
同意16楼
liuwei0908 发表于 2010-2-8 22:53 | 显示全部楼层
static        U32        BitBltTestProc(HWND hwnd,U32 msg,WPARAM wParam,LPARAM lParam)
{
        static        int         i,x0,y0,inc,xx,yy;
        HDC         mem_hdc,hdc;
        RTC_TIME        time;
       
        char buf[128];
        RECT rc;
        COORD x,y;
        ////
       
       
        switch(msg)
        {
       
                case        MSG_CREATE:
                               
                                i=0;
                                x0=0;
                                y0=0;
                                inc=1;
                               
                                TimerCreate(hwnd,0x3000,50);
                               
                                break;
                                ////
                               
                                       
                case        MSG_CHAR:
                                switch(wParam)
                                {
                                       
                                        case        VK_LEFT:
                                                       
                                                        GetWindowRect(hwnd,&rc);
                                                        MoveWindow(hwnd,rc.x-8,rc.y);
                                                        break;
                                                        ////
                                       
                                        case        VK_RIGHT:
                                                       
                                                        GetWindowRect(hwnd,&rc);
                                                        MoveWindow(hwnd,rc.x+8,rc.y);
                                                        break;
                                                        ////
                                       
                                        case        VK_UP:
                                                       
                                                        GetWindowRect(hwnd,&rc);
                                                        MoveWindow(hwnd,rc.x,rc.y-8);
                                                        break;
                                                        ////
                                       
                                        case        VK_DOWN:
                                       
                                                        GetWindowRect(hwnd,&rc);
                                                        MoveWindow(hwnd,rc.x,rc.y+8);
                                                        break;
                                                        ////
                                               
                               
                                }
                                break;
                                ////
                                       
                case        MSG_TIMER:
                               
                                x0+=inc;
                                if(x0>640)        inc=-1;
                                if(x0<=0)        inc=1;

                                InvalidateRect(hwnd,0,0);
                                break;
                                ////
                                       
                case        MSG_PAINT:
               
                                hdc=BeginPaint(hwnd);
                               
                               
                                mem_hdc        =CreateMemDC(1024,32);
                                FontSetSize(mem_hdc,24);
                                ClrScreen(mem_hdc,GetWindowBkColor(hwnd));
                               
                               
                                RTC_GetTime(&time);
                                StrPrintf(buf,"今天是:%04d年%d月%d日 * 现在时间:%02d:%02d:%02d * Task7 -> %d   ",time.Year,time.Month,time.Day,time.Hour,time.Min,time.Sec,i++);
                                TextOut(mem_hdc,150+2,8+2,RGB(20,20,20),RGB(64,00,128),buf);
                                TextOut(mem_hdc,150,8,RGB(255,200,0),RGB_TRANS,buf);
                               
                                GetWindowRect(hwnd,&rc);
                                BitBlt(hdc,6,4,mem_hdc,x0,y0,rc.dx-(6<<1),32,0);
                               
                                ReleaseDC(mem_hdc);
                               
                                EndPaint(hwnd,hdc);
                                break;
                                ////
                default:        DefaultWindowProc(hwnd,msg,wParam,lParam);
               
        }
       
        return MSG_NULL;
}

/*============================================================================*/
循环左右滚屏示例
liuwei0908 发表于 2010-2-8 22:55 | 显示全部楼层
全屏刷新,效率极低,要使用局部刷新才有实用价值.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

226

主题

1761

帖子

30

粉丝
快速回复 在线客服 返回列表 返回顶部