/*
多页图像是指图像中包含有多个图形页。每页可以看作图像帧。这些图像帧通过连续的显示就形成了一副动画。比如GIF文件。
int fcount=0;
//Guid的值在显示GIF为FrameDimensionTime,显示TIF时为FrameDimensionPage
*/
void C实验对话框2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// WCHAR whfn[1024];
// char ch[]="11.gif";
// MultiByteToWideChar(CP_ACP,0,ch,strlen(ch),whfn,1024);
Image* mimage= ::new Image(L"11.gif");
//Image mage;
//mimage.FromFile(L"11.gif");
UINT count = 0;
count = mimage->GetFrameDimensionsCount();
GUID *pDimensionIDs=(GUID*)new GUID[count];
mimage->GetFrameDimensionsList(pDimensionIDs, count);
WCHAR strGuid[39];
StringFromGUID2(pDimensionIDs[0], strGuid, 39);
UINT frameCount=mimage->GetFrameCount(&pDimensionIDs[0]);
delete []pDimensionIDs;
int size =mimage->GetPropertyItemSize(PropertyTagFrameDelay);
PropertyItem* pItem = NULL;
pItem = (PropertyItem*)malloc(size);
mimage->GetPropertyItem(PropertyTagFrameDelay,size,pItem);
GUID Guid = FrameDimensionTime;
HDC hDC=GetDC()->GetSafeHdc();
UINT fcount=0;
//下面最好用一个线程
while(true)
{
Graphics gh(hDC); //hDC是外部传入的画图DC
gh.DrawImage(mimage,0,0,mimage->GetWidth(),mimage->GetHeight());
//重新设置当前的活动数据帧
mimage->SelectActiveFrame(&Guid,fcount++);
if(fcount == frameCount) //frameCount是上面GetFrameCount返回值
fcount= 0; //如果到了最后一帧数据又重新开始
//计算此帧要延迟的时间
long lPause = ((long*)pItem->value)[fcount]*10;
Sleep(lPause); //这里简单使用了sleep
}
}