有
有助
Unregistered / Unconfirmed
GUEST, unregistred user!
我正在做一套屏幕保护程序,需要实现随机块效果,即随机地从源画布拷贝一小块,图像
到目标画布,直到目标画布被铺满为止。随机块的大小计划有三种规格,一种是2x2像素的,
一种是5x5像素的,还有一种是10x10像素的(就像Stardust公司的Stardust ScreenSaver
Toolkit制作出的屏保效果那样),算法该如何设计?我看一本介绍C++ Builder的书上看
到一个算法,但是不符合我的要求,而且速度太慢:
if (x<300){
int i,j;
while (b[i=random(15)][j=random(20)]);
Bit1->Canvas->CopyRect(Rect(30*j,30*i,30*j+30,30*i+30),
Bit2->Canvas,
Rect(30*j,30*i,30*j+30,30*i+30));
Canvas->Draw(0,0,Bit1);
b[j]=true;
x++;
}
其中x为全局整数型变量,b[][]为全局逻辑型数组
上面这个算法是把一个600x450像素的图分为横20,纵15共300个30x30像素的块,并定义
一个逻辑数组,每当写了一个块后就把相应的数组b[][]中的成员标识为True,即已写,
这个过程放在一个Timer的OnTimer事件过程中执行,但运行速度太过于慢了,我需要一个
更快的算法,并且不能在OnTimer过程中执行,必须在一个循环中执行。
到目标画布,直到目标画布被铺满为止。随机块的大小计划有三种规格,一种是2x2像素的,
一种是5x5像素的,还有一种是10x10像素的(就像Stardust公司的Stardust ScreenSaver
Toolkit制作出的屏保效果那样),算法该如何设计?我看一本介绍C++ Builder的书上看
到一个算法,但是不符合我的要求,而且速度太慢:
if (x<300){
int i,j;
while (b[i=random(15)][j=random(20)]);
Bit1->Canvas->CopyRect(Rect(30*j,30*i,30*j+30,30*i+30),
Bit2->Canvas,
Rect(30*j,30*i,30*j+30,30*i+30));
Canvas->Draw(0,0,Bit1);
b[j]=true;
x++;
}
其中x为全局整数型变量,b[][]为全局逻辑型数组
上面这个算法是把一个600x450像素的图分为横20,纵15共300个30x30像素的块,并定义
一个逻辑数组,每当写了一个块后就把相应的数组b[][]中的成员标识为True,即已写,
这个过程放在一个Timer的OnTimer事件过程中执行,但运行速度太过于慢了,我需要一个
更快的算法,并且不能在OnTimer过程中执行,必须在一个循环中执行。