欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android GIF

程序员文章站 2022-03-24 19:14:52
...
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);

	/*
	 * close
	 *
	 */
	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();

	}

}

首先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里面调用,如上代码

   GIF播放使用  http://code.google.com/p/gifview/

转载于:https://www.cnblogs.com/pandans/archive/2012/02/02/2335517.html