我从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;
然后在所有inits之后的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都会返回与之前调用相同的数字。 怎么了? 谢谢
答案 0 :(得分:1)
您正在使用相同的种子初始化伪随机数字生成器。只初始化一次,并使用半随机(系统时钟中的毫秒,毫秒)数字。