android skia 解析gif图片

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);
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值