|
楼主 |
发表于 2010-2-2 21:34:51
|
显示全部楼层
测试程序:
void TestRotateImage(void)
{
U32 hfile,himg,angle,frame,width,height;
char key,str_buf[64];
U8 *buf;
HDC hdc;
COORD x,y;
////
hdc=CreateDC(0,0,ScrWidth(),ScrHeight()-40); //创建设备上下文
angle=0;
while(1)
{
hfile=FILE_INVALID;
while(hfile==FILE_INVALID)
{
DbgUart_Printf("Enter Bmp File Name:\n");
if(DbgUart_Gets(str_buf,64)) //输入目标文件名
{
hfile=FileOpen(str_buf,"rw");
}
else
{
ReleaseDC(hdc);
return;
}
}
////
DbgUart_Printf("File Size =%d Byte\n",GetFileSize(hfile));
buf=MemAlloc(GetFileSize(hfile));
FileRead(buf,GetFileSize(hfile),hfile);
FileClose(hfile);
////
himg=BmpToImage(buf); //Bmp解码
MemFree(buf);
width =((IMAGE*)himg)->Width;
height =((IMAGE*)himg)->Height;
DbgUart_Printf("Image Width=%d,Height=%d\n",width,height);
ThreadLock(); //关线程调度(不关中断)
x=ScrWidth()>>1;
y=ScrHeight()>>1;
while(1)
{
int i;
char str_buf[32];
////
i =0;
angle =0;
frame =0;
SetSysTime(0); //设置系统时间
while(i<10)
{
RotateImage(hdc,x,y,himg,angle);
angle+=5; //角度每次增加5度
frame++; //帧计数
if(angle>=360)
{
angle=0;
i++;
}
////
key=0;
if(DbgUart_Getch(&key))
{
if(key==0x1b) goto ret;
}
}
////
i=GetSysTime();
StrPrintf(str_buf,"RotateImage 测试(%d*%d):Tick数=%d,时间=%d秒,帧数=%d,平均:%d帧/秒",width,height,i,i/TicksPerSec(),frame,(frame*TicksPerSec())/i);
Label(HDC_SCREEN,0,ScrHeight()-40,ScrWidth(),40,RGB(200,0,0),RGB(200,200,200),RGB(0,0,0),LEFT,str_buf);
}
}
ret:
ThreadUnlock(); //恢复线程调度
ReleaseImage(himg); //释放资源
ReleaseDC(hdc);
} |
|