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: