如何去除抖动感?
A.有一些图片,我需要循环播放(使用Image装入)
B.在图片的底部,我实现滚动字幕(使用Panel+Label+Time控制),使用TRzMarqueeStatus同样如此
C.当我装入图片的时候,Label就会暂停一下(不连续)
请教如何能才能消除?或者有其他什么更好的建议。谢谢
我的一些调试代码如下:
说明:
1、Panel,Form使用双缓冲
2、程序在目录机器上运行,目标机器配置有点低。(研华工控主板,主要做嵌入式用的)
3、目标系统为Winxp,256M,C400
- Delphi(Pascal) code
{控制Lable滚动,Timer时间间隔为10ms}procedure TForm1.ScrollTimer(Sender: TObject); begin Label1.Left:=Label1.Left-1; if Label1.Left<(Panel1.Left-Label1.Width) then Label1.Left:=Panel1.Width;end;{间隔1秒随即装图片}procedure TForm1.LoadPicTimer(Sender: TObject);var picName:String;begin PicName:=FilePath+format('pic%0.4d.jpg',[Random(21)]);//+'.jpg'; if FileExists(PicName) then { ImageEnView1.IO.LoadFromFile(PicName); //使用ImageEnView一样抖动} Image1.Picture.LoadFromFile(PicName);end;[解决办法]
加一句application.ProcessMessages 试试
[解决办法]
DoubleBuffered:=true;
这句加上绘好多了
[解决办法]
用多线程吧
[解决办法]
用delphi的常规方式处理这个不适合,你应该来一些其它的处理。
最粗显的方式是:提前装载图片文件,在切换时以内存数据。
[解决办法]
> 我也使用Canvas画,TextOut.效果还是抖动
你可以使用双重缓冲(double buffering),具体就是:先将绘制的内容画在bitmap上,再将bitmap覆盖到屏幕上。
另外:
>有没有什么方能使用滚动条进度独立出来,不受主程序影响
你先前没说到这个问题。
这个需要使用多线程技术。