Je voudrais enregistrer des images individuelles (bitmap) d'un fichier GIF et d'un fichier vidéo. Je veux 5 images de chaque fichier. En fonction de la longueur (secondes) des fichiers, les images doivent prendre des photos à intervalles réguliers, de sorte qu'il y a 5 images. J'espère que quelqu'un peut m'aider, merci! P>
3 Réponses :
Vous pouvez utiliser Android-NDK-GIF bibliothèque pour répondre à vos besoins et Voici un exemple complet de comment obtenir chaque bitmap de gif, vous pouvez modifier après avoir rempli votre gifdecoder.framenum () code> à 4 afin que vous puissiez obtenir les 5 premiers cadres de votre gif
ArrayListBitmaps code> Vous pouvez enregistrer chaque
bitmap code> dans votre galerie p> p>
Merci pour la réponse, mais la bibliothèque ne fonctionne pas. Y a-t-il une autre option?
@XX Mais la bibliothèque ne fonctionne pas B>, avez-vous eu un problème avec cela? S'il vous plaît expliquer plus pour que je puisse vous aider
J'ai trouvé une bonne solution (pour GIFS) avec GLIDE:
Glide.with(Activity.this) .asGif() .load(picturePath) .into(new SimpleTarget<GifDrawable>() { @Override public void onResourceReady(@NonNull GifDrawable resource, @Nullable Transition<? super GifDrawable> transition) { try { Object GifState = resource.getConstantState(); Field frameLoader = GifState.getClass().getDeclaredField("frameLoader"); frameLoader.setAccessible(true); Object gifFrameLoader = frameLoader.get(GifState); Field gifDecoder = gifFrameLoader.getClass().getDeclaredField("gifDecoder"); gifDecoder.setAccessible(true); StandardGifDecoder standardGifDecoder = (StandardGifDecoder) gifDecoder.get(gifFrameLoader); for (int i = 0; i < standardGifDecoder.getFrameCount(); i++) { standardGifDecoder.advance(); if (i == 4) { bitmap1 = standardGifDecoder.getNextFrame(); } else if (i == standardGifDecoder.getFrameCount() / 3) { bitmap2 = standardGifDecoder.getNextFrame(); } else if (i == standardGifDecoder.getFrameCount() / 2) { bitmap3 = standardGifDecoder.getNextFrame(); } else if (i == standardGifDecoder.getFrameCount() - 4) { bitmap4 = standardGifDecoder.getNextFrame(); } } } catch (Exception ex) { ex.printStackTrace(); } } });
Et voici une solution (pour vidéos) avec MediaMetadatareReviever: