Jak stworzyć animowany GIF z JPEG w Androidzie (rozwój)
Szukam prostego sposobu na stworzenie animowanego GIFA w natywnej aplikacji na Androida. Pliki źródłowe powinny być JPEG (z aparatu lub co innego), A wyjście powinno być zapisane jako GIF na urządzeniu.
Nie chcę wiedzieć, jak odtwarzać animacje lub animowane pliki GIF.
Aby było jasne: chcę wiedzieć, jak umieścić pojedyncze obrazy klatka po klatce w "filmie", a następnie zapisać go jako.plik gif.
Np. Ta aplikacja może zrobić chcę chcę zrób.
6 answers
Zobacz To rozwiązanie.
Https://github.com/nbadal/android-gif-encoder
To wersja Androida tego posta.Http://www.jappit.com/blog/2008/12/04/j2me-animated-gif-encoder/
Aby użyć tej klasy, poniżej znajduje się przykładowa metoda pomocnicza do generowania tablicy bajtów GIF. Uwaga funkcja getBitmapArray() jest metodą zwracania wszystkich plików bitmapowych w adapterze obrazu jednocześnie. Więc wejście to wszystkie pliki Bitmapowe w jednym adapterze, wyjście jest tablicą bajtów, którą można zapisać do pliku.
public byte[] generateGIF() {
ArrayList<Bitmap> bitmaps = adapter.getBitmapArray();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.start(bos);
for (Bitmap bitmap : bitmaps) {
encoder.addFrame(bitmap);
}
encoder.finish();
return bos.toByteArray();
}
Aby użyć tej funkcji, wykonaj następujące czynności, a następnie możesz zapisać plik w SDcard.
FileOutputStream outStream = null;
try{
outStream = new FileOutputStream("/sdcard/generate_gif/test.gif");
outStream.write(generateGIF());
outStream.close();
}catch(Exception e){
e.printStackTrace();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-29 02:54:42
To może Ci pomóc. Jest to klasa, która służy do generowania plików gif.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 09:15:17
Jeśli chcesz wyświetlać tylko te bitmapy jak animowany gif, możesz utworzyć AnimatedDrawable używając tego kodu:
AnimationDrawable animation = new AnimationDrawable();
animation.addFrame(getResources().getDrawable(R.drawable.image1), 10);
animation.addFrame(getResources().getDrawable(R.drawable.image2), 50);
animation.addFrame(getResources().getDrawable(R.drawable.image3), 30);
animation.setOneShot(false);
ImageView imageAnim = (ImageView) findViewById(R.id.imageView);
imageAnim.setImageDrawable(animation);
// start the animation!
animation.start();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-10 15:32:15
Dla mnie bardzo dobrze, tworzy plik szybko i dobrej jakości obrazy
//True for dither. Will need more memory and CPU
AnimatedGIFWriter writer = new AnimatedGIFWriter(true);
OutputStream os = new FileOutputStream("animated.gif");
Bitmap bitmap; // Grab the Bitmap whatever way you can
// Use -1 for both logical screen width and height to use the first frame dimension
writer.prepareForWrite(os, -1, -1)
writer.writeFrame(os, bitmap);
// Keep adding frame here
writer.finishWrite(os);
// And you are done!!!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 16:19:43
Rozwiązanie 1
Widziałeś ten artykuł? ..... jest z kodem źródłowym..
Z tego co wiem, android chyba nie odtwarza animacji gif. Powinieneś użyć widoku sieci Web, który będzie odtwarzał animację gif..
Http://droid-blog.net/2011/10/14/tutorial-how-to-use-animated-gifs-in-android-part-1/
I jeśli możesz..
Http://androidosbeginning.blogspot.in/2010/09/gif-animation-in-android.html
Rozwiązanie 2
Android zapewnia Rysowalną animację .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 06:32:53
Gif to w zasadzie zbiór obrazów ze stałym opóźnieniem czasowym w klatkach. Nie można bezpośrednio odtwarzać gif w Androidzie. Dużo pracowałem nad odtwarzaniem animacji gif w Androidzie.
-
Podczas grania w gif ' a obsługujemy również wszystkie wywołania odtwarzania klatek przez naszą siebie. Więc to nie jest najlepsze podejście
Jeśli masz zestaw obrazów, po prostu odtwarzaj je z opóźnieniem w klatkach. Że to wszystko, czego chcesz.
Nie można również tworzyć gif w aplikacji za pomocą kodu natywnego. Są niektóre wady, jak również za pomocą formatu gif. Z którym miałem do czynienia w mojej grze.
Jeśli masz zestaw rysunków, możesz użyć AnimationDrawable do pokazania animacji, takiej jak gif. Może również ustawić dowolny Widok.
Zrobiłem również niestandardowy widok do odtwarzania animacji gif. najpierw Ładuję gif i konwertuję go do InputStream, a następnie przekazuję go do mojej niestandardowej klasy widoku, aby odtworzyć gif.
public class GifWebView extends View {
private Movie mMovie;
InputStream mStream;
long mMoviestart;
private boolean play;
public GifWebView(Context context, InputStream stream) {
super(context);
mStream = stream;
setPlay(true);
mMovie = Movie.decodeStream(mStream);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
final long now = SystemClock.uptimeMillis();
if (mMoviestart == 0) {
mMoviestart = now;
}
final int relTime = (int) ((now - mMoviestart) % mMovie.duration());
mMovie.setTime(relTime);
mMovie.draw(canvas, 20, 20);
if (play) {
Log.i("reltime", "" + relTime + ",duration:" + mMovie.duration());
this.invalidate();
}
}
@Override
public boolean onTouchEvent(android.view.MotionEvent event) {
return true;
};
public boolean isPlay() {
return play;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-21 09:28:38