資源簡介
WindowsCE或WM上,用C++實現加載顯示GIF動畫的程序以及代碼

代碼片段和文件信息
#include?
#include?“gif89a.h“
#include?“gif.h“
LPCGLOBAL_INFO?gi;
LPframe?fm;
BYTE?*prevBits;
//將顏色表轉換成調色板
int?get_palette(RGBQUAD?*lpPaletteBYTE?*lpColorTableint?size)
{
DWORD?*p=(DWORD*)lpPalette; BYTE?*q=lpColorTable;
while?(size--) {*p++=RGB(*(q+2)*(q+1)*q);q+=3;}
return?sizeof(RGBQUAD)*256;
}
//對當前幀進行交錯處理
void?interlace()
{
if?(!fm->interlaceFlag)?return;
int?w=fm->imageWidthh=fm->imageHeighti;
BYTE?*dest*p*q; dest=new?BYTE[w*h];
q=fm->dataBuf;
for?(i=0;i for?(i=4;i for?(i=2;i for?(i=1;i
delete?[]fm->dataBuf;
fm->dataBuf=dest;
fm->interlaceFlag=FALSE;
}
//顏色復制函數;不復制前景色
void?copycolor(BYTE?*p1BYTE?*p2int?len)
{
while?(len--){if(*p2!=fm->ctrlExt.trsColorIndex)?*p1=*p2;??p1++;p2++;}
}
//取得當前幀的圖像位數據
int?get_bits(BYTE?*lpBits)
{
BYTE?*p*q;
int?bpl=(gi->scrWidth*8+31)/32*4; //bytes?per?line
int?iw=fm->imageWidthh=fm->imageHeight;
if?((wscrWidth||hscrHeight)&&prevBits)
memcpy(lpBitsprevBitsbpl*gi->scrHeight);
p=lpBits+(gi->scrHeight-1-fm->imageTPos)*bpl+fm->imageLPos;
q=(BYTE*)(fm->dataBuf);
if?(!fm->ctrlExt.trsFlag||!prevBits) //沒有透明色或者是第一幀
for?(i=0;i else
for?(i=0;i
return?bpl*gi->scrHeight;
}
HANDLE?LoadGif(LPCTSTR?fn)
{
CGif89a?gif(fnFALSE); if?(!gif)?return?0;
int?ilenwhbplframes;
HANDLE?hResDyn;
BYTE?*lpResDyn*lpBits;
RESDYNDATAHEADER?*lpHead;
DISPLAYframeINFO?*lpDisp;
STOREframeINFO?*lpStore;
gi=gif.getGlobalInfo();
frames=gi->frames;
w=gi->scrWidth; h=gi->scrHeight;
bpl=(w*8+31)/32*4;
len=sizeof(RESDYNDATAHEADER)
+sizeof(DISPLAYframeINFO)*frames
+sizeof(STOREframeINFO)*frames
+sizeof(RGBQUAD)*256;
len+=(sizeof(RGBQUAD)*256+bpl*h)*frames;
hResDyn=GlobalAlloc(GHNDlen);
if?(!hResDyn)?return?0;
lpResDyn=(BYTE*)GlobalLock(hResDyn);
lpHead=(RESDYNDATAHEADER*)lpResDyn;
lpHead->ContentSize=len;
lpHead->Width=w;
lpHead->Height=h;
lpHead->BitCount=8;
lpHead->DisplayframeQuantity=frames;
lpHead->StroeframeQuantity=frames;
lpDisp=(DISPLAYframeINFO*)(lpResDyn+sizeof(RESDYNDATAHEADER));
lpStore=(STOREframeINFO*)((BYTE*)lpDisp+sizeof(DISPLAYframeINFO)*frames);
lpBits=(BYTE*)lpStore+sizeof(STOREframeINFO)*frames;
len=0;
if?(gi->gFlag)?
len=get_palette((RGBQUAD*)lpBitsgi->gColorTablegi->gSize);
lpBits+=len; prevBits=NULL;
for(i=0;iames;i++)
{
fm=(LPframe)gif.getNextframe();
if?(!fm)?goto?error;
lpDisp->Storeframe=i+1;
lpDisp->DelayTime=fm->ctrlExt.delayTime*10;
lpStore->Width=w;
lpStore->Height=h;
lpStore->BitCount=8;
lpStore->LocalPalette=fm->lFlag;
lpStore->XorFlag=0;
lpStore->Reserved=0;
lpStore->DataOfset=lpBits-lpResDyn;
len=0;
if?(fm->lF
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????27136??2007-01-21?17:45??ShowGif\ARMV4Rel\ShowGif.exe
?????目錄??????????0??2007-01-21?17:50??ShowGif\ARMV4Rel
?????文件???????3619??2007-01-21?17:03??ShowGif\Gif.cpp
?????文件???????1230??2007-01-21?17:09??ShowGif\Gif.h
?????文件??????17101??2007-01-21?17:36??ShowGif\gif89a.cpp
?????文件???????1771??2007-01-21?16:46??ShowGif\gif89a.h
?????文件???????5313??2007-01-21?17:11??ShowGif\image.cpp
?????文件???????1817??2007-01-21?17:07??ShowGif\image.h
?????文件???????2863??2007-01-21?16:20??ShowGif\MainFrm.cpp
?????文件???????2315??2007-01-21?16:20??ShowGif\MainFrm.h
?????文件????????768??2007-01-21?16:20??ShowGif\newres.h
?????文件???????4087??2007-01-21?16:20??ShowGif\ReadMe.txt
?????文件????????630??2007-01-21?16:20??ShowGif\res\Cmdbar.bmp
?????文件???????1078??2007-01-21?16:20??ShowGif\res\ShowGif.ico
?????文件????????417??2007-01-21?16:20??ShowGif\res\ShowGif.rc2
?????目錄??????????0??2007-01-21?16:20??ShowGif\res
?????文件???????1199??2007-01-21?16:59??ShowGif\resource.h
?????文件???????4126??2007-01-21?16:20??ShowGif\ShowGif.cpp
?????文件???????1380??2007-01-21?16:20??ShowGif\ShowGif.h
?????文件??????10349??2007-01-21?17:03??ShowGif\ShowGif.rc
?????文件??????66560??2007-01-21?17:49??ShowGif\ShowGif.vcb
?????文件???????2519??2007-01-21?17:43??ShowGif\ShowGif.vcc
?????文件???????3281??2007-01-21?17:46??ShowGif\ShowGif.vcl
?????文件??????50688??2007-01-21?17:49??ShowGif\ShowGif.vco
?????文件??????16135??2007-01-21?17:47??ShowGif\ShowGif.vcp
?????文件????????544??2007-01-21?16:20??ShowGif\ShowGif.vcw
?????文件???????2234??2007-01-21?17:44??ShowGif\ShowGifDoc.cpp
?????文件???????1468??2007-01-21?17:44??ShowGif\ShowGifDoc.h
?????文件???????2778??2007-01-21?17:43??ShowGif\ShowGifView.cpp
?????文件???????1800??2007-01-21?17:43??ShowGif\ShowGifView.h
............此處省略6個文件信息
- 上一篇:圖書館管理系統c語言編寫
- 下一篇:物業管理系統c++ 課程設計源碼
評論
共有 條評論