打印

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

[复制链接]
12078|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我是土匪|  楼主 | 2009-11-6 20:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
与时俱进| | 2009-11-6 21:03 | 只看该作者
如果显示缓存的地址可以指定,那么才能想出办法,否则,只有整屏刷新了,个人愚见。

使用特权

评论回复
板凳
xwj| | 2009-11-6 21:13 | 只看该作者
首先,要看x方向坐标的最小单位是多少,是一点还是8点;
然后,还要看是否需要保留背景、是否需要保证背景正确

至于移位,倒是很小的问题

使用特权

评论回复
地板
我是土匪|  楼主 | 2009-11-6 21:19 | 只看该作者
洗碗机说的X最小单位是步进单位吧,这个看效果,最好可调的参数。

背景是单一颜色

使用特权

评论回复
5
xwj| | 2009-11-6 21:22 | 只看该作者
不是步进间隔,而是说屏的控制器的数据排列,比如是否一个直接对应横向8点

使用特权

评论回复
6
与时俱进| | 2009-11-6 21:49 | 只看该作者
哈哈,洗碗机!
就是问一个点对应缓存的是1bit、1byte or 3 bytes,是不是这样洗碗机同志?

使用特权

评论回复
7
我是土匪|  楼主 | 2009-11-6 21:52 | 只看该作者
TFT  RGB 565


打算一帧一帧刷过去

使用特权

评论回复
8
neuq521| | 2009-11-7 12:16 | 只看该作者
看一下屏的驱动芯片的资料,找找有没有现成的命令,

使用特权

评论回复
9
我是土匪|  楼主 | 2009-11-10 09:24 | 只看该作者
没有这种命令

使用特权

评论回复
10
wangkj| | 2009-11-11 08:27 | 只看该作者
设置起始扫描指针。

使用特权

评论回复
11
avr32| | 2009-11-12 17:07 | 只看该作者
看你用什么软件,最好的方法是用定时器,按视觉效果隔一定时间移动一次.

使用特权

评论回复
12
avr32| | 2009-11-12 17:14 | 只看该作者
如果是CE系统,交给控件处理,把控制隔一定时间移动一下就会产生这样的效果了

使用特权

评论回复
13
我是土匪|  楼主 | 2009-11-14 16:05 | 只看该作者
一帧一帧刷的,效果不是很流畅,但是boss觉得可以。

使用特权

评论回复
14
amtek| | 2009-11-23 16:47 | 只看该作者
最简单的办法就是改屏幕左上角的起始地址,实现滚屏效果。

使用特权

评论回复
15
liuwei0908| | 2009-12-26 01:34 | 只看该作者
Bitblt+MemDC

使用特权

评论回复
16
Fe_ARM| | 2009-12-26 14:36 | 只看该作者
我要看你图像变化的快慢是否有要求

使用特权

评论回复
17
k3342637| | 2010-1-6 15:24 | 只看该作者
我也遇到这个问题啊,我要显示的是波形,还有背景,除了整平的刷还有别的方法不啊~~~

使用特权

评论回复
18
irzn| | 2010-1-25 21:57 | 只看该作者
同意16楼

使用特权

评论回复
19
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;
}

/*============================================================================*/
循环左右滚屏示例

使用特权

评论回复
20
liuwei0908| | 2010-2-8 22:55 | 只看该作者
全屏刷新,效率极低,要使用局部刷新才有实用价值.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

226

主题

1761

帖子

30

粉丝