使用SYSTEMTIME,FILETIME和ULARGE_INTEGER修改date和时间值

我正在用C ++编写一个程序,使用Visual Studio 2005,需要在一组图像上创build一个水印。

这些图像是从一定时间间隔处理的video中获取的。 我正在尝试做的是通过SYSTEMTIME修改每个图像上的时间。 我看了MSDN,它说不要修改SYSTEMTIME本身内的值,而是将其转换为FILETIME,然后ULARGE_INTEGER。 我的问题是如何ULARGE_INTEGER分裂? 是HighPart的date和低部分的时间,如果是这样的情况下,我怎么考虑翻转? 如果图像显示在2011年2月25日下午11点58分,直到12:11 2/26/2011? 当我将其转换回SYSTEMTIMEvariables时,是否会自动添加指定的值并显示?

在此先感谢您的帮助。

他们建议将SYSTEMTIME转换为FILETIME ,这是自一个时代以来的一系列刻度。 然后,您可以添加所需数量的“嘀嗒”(即100ns间隔)以指示您的时间,并转换回SYSTEMTIME

ULARGE_INTEGER结构是一个与QuadPart成员的联合,它是一个64位数字,可以直接添加到(在最近的硬件上)。

 SYSTEMTIME add( SYSTEMTIME s, double seconds ) { FILETIME f; SystemTimeToFileTime( &s, &f ); ULARGE_INTEGER u ; memcpy( &u , &f , sizeof( u ) ); const double c_dSecondsPer100nsInterval = 100.*1.e-9; const double c_dNumberOf100nsIntervals = seconds / c_dSecondsPer100nsInterval; // note: you may want to round the number of intervals. u.QuadPart += c_dNumberOf100nsIntervals; memcpy( &f, &u, sizeof( f ) ); FileTimeToSystemTime( &f, &s ); return s; }