http://blog.leepood.com/the-android-gif-maker
最近做项目有个需求就是将若干张图片合成Gif动画,大家都知道在Android平台上目前是不支持Gif的,所以利用本地的Api是不可能达到目的的,于是上网查资料,得知用NDK可以达到目的OK,折腾一番搞定,下面分享下:
首先NDK的环境搭建我就不讲了,这些可以查网上的,首选去http://jiggawatt.org/badc0de/android/index.html#gifflen 下载gifflen的源码来编译。下载到源码之后我们要做的就是修改下方法名称,NDK里面书写方法的名称需同你native 类的包名相同,举个例子我的native方法类的完整路径是:com.leepood.gifmaker.GifUtil 那么我需要将下载回来的源码里面的jni call的方法名称改为以Java_com_leepood_gifmaker_GitUtil_开头,这样一切就OK拉,于是NDK编译得到libgifflen.so文件,于是在java里面调用,上我写的代码:
package com.leepood.gifmaker;
import android.graphics.Bitmap;
import android.util.Log;
public class GifUtil {
private final String TAG=this.getClass().getName();
static
{
System.loadLibrary("gifflen");
}
/**
* Init the gif file
* @param gifName name
* @param w width
* @param h height
* @param numColors colors
* @param quality
* @param frameDelay times
* @return
*/
public native int Init(String gifName, int w, int h, int numColors, int quality,
int frameDelay);
public native void Close();
public native int AddFrame(int[] pixels);
/**
* encode the bitmaps to gif
* @param fileName
* @param bitmaps
* @param delay
*/
public void Encode(String fileName,Bitmap[] bitmaps,int delay)
{
if(bitmaps==null||bitmaps.length==0)
{
throw new NullPointerException("Bitmaps should have content!!!");
}
int width=bitmaps[0].getWidth();
int height=bitmaps[0].getHeight();
if(Init(fileName,width,height,256,100,delay)!=0)
{
Log.e(TAG, "GifUtil init failed");
return;
}
for(Bitmap bp:bitmaps)
{
int pixels[]=new int[width*height];
bp.getPixels(pixels, 0, width, 0, 0, width, height);
AddFrame(pixels);
}
Close();
}
}
这样就行啦,呵呵,赶快去试试呗!
本文固定链接地址:
Android平台上合成GIF