0
votes

Enregistrer bitmaps de gif / vidéo

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!


0 commentaires

3 Réponses :


0
votes

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 gifdecoder.framenum () à 4 afin que vous puissiez obtenir les 5 premiers cadres de votre gif xxx < p> bitmapgifutil.java xxx

après avoir rempli votre ArrayListBitmaps Vous pouvez enregistrer chaque bitmap dans votre galerie


2 commentaires

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 , avez-vous eu un problème avec cela? S'il vous plaît expliquer plus pour que je puisse vous aider



1
votes

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();
                                        }

                                    }
                                });


0 commentaires

0
votes

Et voici une solution (pour vidéos) avec MediaMetadatareReviever: xxx


0 commentaires