SkMovie* fMovie;
FILE *fp;
int flen;
int frame;
GifFileType* fGIF;
static int Decode(GifFileType* fileType, GifByteType* out, int size)
{
SkStream* stream = (SkStream*) fileType->UserData;
return (int) stream->read(out, size);
}
void Java_SkiaView_drawGIF(JNIEnv *env,
jobject thizz, jobject canvas)
{
if (fMovie)
{
if (fMovie->duration())
{
fMovie->setTime(SkTime::GetMSecs() % fMovie->duration());
}
else
{
fMovie->setTime(0);
}
SkCanvas* canv = GraphicsJNI::getNativeCanvas(env, canvas );
canv->drawBitmap(fMovie->bitmap(), 0, 0);
}
else
{
LOGE("SkMovie::DecodeFile\n");
fp=fopen("/sdcard/back.gif","r");
fseek(fp, 0L, SEEK_END); //把位置指针移到文件末尾
flen = ftell(fp); //求出文件的总字节数
rewind(fp);
unsigned char* buffer = new unsigned char[flen];
fread(buffer,flen,1,fp);
fclose(fp);
frame = 0;
SkMemoryStream* stream = new SkMemoryStream(buffer, flen, false);
fGIF = DGifOpen( stream, Decode );
if (DGifSlurp(fGIF) != GIF_OK)
{
DGifCloseFile(fGIF);
fGIF = NULL;
}
frame = fGIF->ImageCount;
fMovie = SkMovie::DecodeMemory(((SkStream*)(fGIF->UserData))->getMemoryBase(), flen);
delete []buffer;
delete stream;
LOGE("/sdcard/loading.gif frame: %d", frame);
}
}
FILE *fp;
int flen;
int frame;
GifFileType* fGIF;
static int Decode(GifFileType* fileType, GifByteType* out, int size)
{
SkStream* stream = (SkStream*) fileType->UserData;
return (int) stream->read(out, size);
}
void Java_SkiaView_drawGIF(JNIEnv *env,
jobject thizz, jobject canvas)
{
if (fMovie)
{
if (fMovie->duration())
{
fMovie->setTime(SkTime::GetMSecs() % fMovie->duration());
}
else
{
fMovie->setTime(0);
}
SkCanvas* canv = GraphicsJNI::getNativeCanvas(env, canvas );
canv->drawBitmap(fMovie->bitmap(), 0, 0);
}
else
{
LOGE("SkMovie::DecodeFile\n");
fp=fopen("/sdcard/back.gif","r");
fseek(fp, 0L, SEEK_END); //把位置指针移到文件末尾
flen = ftell(fp); //求出文件的总字节数
rewind(fp);
unsigned char* buffer = new unsigned char[flen];
fread(buffer,flen,1,fp);
fclose(fp);
frame = 0;
SkMemoryStream* stream = new SkMemoryStream(buffer, flen, false);
fGIF = DGifOpen( stream, Decode );
if (DGifSlurp(fGIF) != GIF_OK)
{
DGifCloseFile(fGIF);
fGIF = NULL;
}
frame = fGIF->ImageCount;
fMovie = SkMovie::DecodeMemory(((SkStream*)(fGIF->UserData))->getMemoryBase(), flen);
delete []buffer;
delete stream;
LOGE("/sdcard/loading.gif frame: %d", frame);
}
}