【发布时间】:2011-09-10 12:08:54
【问题描述】:
我正在从 AVI 中提取帧。我希望用户选择他是想从用户给定的范围内获取所有帧还是获取所有可用的帧或获取用户给定的随机帧数。前两个功能工作得很好。但是对于随机帧,我总是只得到一帧,而不是给定的帧数。所以,这里用户设置帧数:
case AVIINF_BUTTON_GETRAND:
extractmode=-1;
GetDlgItemText(aviinfhwnd, AVIINF_EDIT_GETRAND, charfrQuantity, 20);
frQuantity = atoi(charfrQuantity);
ExtractAVIFrames(extractmode, frFrom, frTo, frQuantity);
EndDialog(aviinfhwnd, IDCANCEL);
break;
然后在所有初始化之后在 ExtractAVIFrames() 中,我这样做:
case -1://get x random frames
for (int i=1; i<=frQuantity; i++)
{
index= GetRandomInt(iNumFrames);
BYTE* pDIB = (BYTE*) AVIStreamGetFrame(pFrame, index);
CreateFromPackedDIBPointer(pDIB, index);
}
break;
调用GetRandomInt()
int GetRandomInt(int randNumScale)
{
srand((unsigned)time(0));
int random_integer;
int range=randNumScale;
random_integer = (rand()%range)+1;
return random_integer;
}
所以,这应该调用 GetRandomInt() 函数 frQuantity-times,我应该有 frQuantity BMP,对吧?但我没有,我总是只得到一个(随机一个)。似乎在每次调用后 GetRandomInt 返回与上一次调用相同的数字。 怎么了? 谢谢
【问题讨论】:
-
之前问过很多次。 srand() 应该 ONLY 被称为 ONCE。将其作为 main() 中的第一条语句。