(Видео в BitmapArray) Список растровых массивов перезаписывает существующие элементы при каждом добавлении нового элемента в android studio - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть программа, которая читает файл mp4 и разделяет его на массив растровых изображений. Проблема заключалась в том, что каждый раз, когда я добавляю новый элемент, он перезаписывает остальные элементы. Мне наконец удалось решить проблему, но я хочу поделиться своим кодом на случай, если кто-то столкнется с той же проблемой.

FrameGrabber videoGrabber = new FFmpegFrameGrabber(VideoPath);

        try
        {
            videoGrabber.setFormat("mp4");//mp4 for example
            videoGrabber.start();
        } catch (Exception e)
        {
            Log.e("javacv", "Failed to start grabber" + e);
        }

        Frame vFrame = null;
        AndroidFrameConverter androidFrameConverter = new AndroidFrameConverter();
        ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>();

        do
        {
            try
            {
                vFrame = videoGrabber.grabFrame();
                if(vFrame != null) {
                    Bitmap temp = androidFrameConverter.convert(vFrame);
                    bitmapArray.add( temp.copy(temp.getConfig(),true)); // the issue solved here 
                    //bitmapAray.add(temp) // will cause the overwrite 
                    set.add(temp);
                    bitmapNum++ ;
                }
            } catch (Exception e)
            {
                Log.e("javacv", "video grabFrame failed: "+ e);
            }
        }while(vFrame != null);

        try
        {
            videoGrabber.stop();
        }catch (Exception e)
        {
            Log.e("javacv", "failed to stop video grabber", e);
        }

Я думаю, что проблема заключалась в том, что программа хранит адрес, а не само значение, поэтому при изменении значения внутри адреса все элементы будут считывать одно и то же значение с одного и того же адреса. Я не уверен, правильно ли мои объяснения. Я надеюсь, что если кто-то знает, что настоящая проблема, дайте мне знать.

...