android skia 解析gif圖片

來源:互聯網
上載者:User

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

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.