Android平台上合成GIF

来源:互联网 发布:优化标题会降权吗 编辑:程序博客网 时间:2024/09/21 09:24

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