读书人

请问实现图片的滚动效果

发布时间: 2012-02-17 17:50:42 作者: rapoo

请教实现图片的滚动效果 - C++ Builder / Windows SDK/API
如题,想在一个显示区域(只能显示一个图片的大小)里面滚动显示一组图片,速度渐渐变慢, 请教各位有什么好的思路实现

[解决办法]
参看这个贴
http://topic.csdn.net/u/20090210/00/11207a98-c1be-4ba2-bec8-8f99980c8883.html
[解决办法]
我以前做过一个图片模拟特效的项目
项目没有留下来,只留了些草稿,代码不规范
大体的思路是,由于模拟特效需要单独空间,我开辟了一个新的线程,之后反复copyrect图像的像素,最左边移动到最右边。这样的算法来模拟。
部分粗略代码如下
PreviewForm->ImagMain1->Canvas->Lock(); //图片动作过程中,对image的canvas进行保护,避免蓝屏现象的出现,详见buglist或项目总结
PreviewForm->ImagMain1->Canvas->CopyRect(Rect(0,0,width,height),newbmp->Canvas,Rect(0,0,newbmp->Width,newbmp->Height));
PreviewForm->ImagMain1->Refresh();
PreviewForm->ImagMain2->Canvas->Lock();
tempbmp->Canvas->Lock();

for(i=0;i<=width&&!Terminated;i++) //图片的动作方式见详细设计说明
{
PreviewForm->ImagMain2->Canvas->CopyRect(Rect(0,0,i,height),PreviewForm->ImagMain1->Canvas,Rect(width-i,0,width,height));
PreviewForm->ImagMain2->Canvas->CopyRect(Rect(i,0,width,height),tempbmp->Canvas,Rect(0,0,tempbmp->Width-i,tempbmp->Height));
PreviewForm->ImagMain2->Refresh();
Sleep(cyclespeed*BASESPEED);
PreviewForm->ImagMain2->Visible=true;
PreviewForm->ImagMain2->Refresh();
}
[解决办法]
1.所有片保存在本地
很直接用Image和Timer控件,遍本地的放片的文件,一一去load,在load之前先用image->Pictuer=NULL清,再去load.

2.上得
上抓取所有Image的URL,放在StringList,循StringList,配合Timer控件用LoadFromStream去理
[解决办法]
两个TImage移动
[解决办法]
通过移动Image的坐标实现移动
[解决办法]
具体要干什么?是每一幅图都要滚动?还是每组图之间滚动显示?

读书人网 >C++ Builder

热点推荐