Android NDK GIF Library

Additional

Language
C++
Version
0.3.0 (Jul 3, 2016)
Created
Jul 23, 2015
Updated
Jan 22, 2022 (Retired)
Owner
Wayne Jo (waynejo)
Contributors
Wayne Jo (waynejo)
JBurkeKF
gunmong83
petalomaniac
4
Activity
Badge
Generate
Download
Source code

Android NDK GIF Library

GIF library built with ndk and gradle in aar format for usage with android gradle build system.

1.0.1 Change Log

  • Added Gif Image Iterator for Image decoding.
  • Fixed a problem of residual image on transparent background.

Encoding Option

  • ENCODING_TYPE_SIMPLE_FAST
    • use low memory and encode fast. But low quality.
  • ENCODING_TYPE_FAST (Thanks to commitor "JBurkeKF")
    • encode fast. And better quality.
  • ENCODING_TYPE_NORMAL_LOW_MEMORY
    • use lower memory than ENCODING_TYPE_STABLE_HIGH_MEMORY. and image changing dynamic.
  • ENCODING_TYPE_STABLE_HIGH_MEMORY
    • slowest and use high memory. But high quality and stable image sequence.

How to use

Remote repository

...

repositories {
    maven { url 'https://repo1.maven.org/maven2' }
    ...
}

dependencies {
    implementation ('io.github.waynejo:androidndkgif:1.0.1')
}

Decoding using Iterator. (Less memory used)

GifDecoder gifDecoder = new GifDecoder();
final GifImageIterator iterator = gifDecoder.loadUsingIterator(destFile);
while (iterator.hasNext()) {
    GifImage next = iterator.next();
    if (null != next) {
        imageView.setImageBitmap(next.bitmap);
    }
}
iterator.close();

Decoding

GifDecoder gifDecoder = new GifDecoder();
boolean isSucceeded = gifDecoder.load(destFile);
if (isSucceeded) {
    for (int i = 0; i < gifDecoder.frameNum(); ++i) {
        Bitmap bitmap = gifDecoder.frame(i);
    }
}

Encoding

GifEncoder gifEncoder = new GifEncoder();
gifEncoder.init(width, height, filePath, GifEncoder.EncodingType.ENCODING_TYPE_NORMAL_LOW_MEMORY);

// Bitmap is MUST ARGB_8888.
gifEncoder.encodeFrame(bitmap1, delayMs);
gifEncoder.encodeFrame(bitmap2, delayMs);

gifEncoder.close();

Reference