0

我正在尝试使用MediaMetadataRetriever将 Image 设置为 Video 中的 imageView 。

每次我移动搜索栏时,我都会使用框架并尝试使用它来显示它

mediaMetadataRetriever.getFrameAtTime((int)(33*10),MediaMetadataRetriever.OPTION_CLOSEST);

它第一次工作正常,但是当我使用 seekbar 的进度再次尝试时,它不起作用。下面是我的代码。

  @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            seekBar1 = (SeekBar)findViewById(R.id.seekBar1);
            imageView1 = (ImageView)findViewById(R.id.imageView1);

            File sdcard = Environment.getExternalStorageDirectory();
            file = new File(sdcard,"VID_20130922_130050.mp4");
            retriever = new MediaMetadataRetriever();
            try {
                retriever.setDataSource(file.getAbsolutePath());
                Log.v("", "");
                Bitmap bitmap = retriever.getFrameAtTime((int)(33*10),MediaMetadataRetriever.OPTION_CLOSEST);
                imageView1.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 480, 320, false));
                bitmap.recycle();

            } catch (IllegalArgumentException ex) {
                ex.printStackTrace();
            } catch (RuntimeException ex) {
                ex.printStackTrace();
            }

seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {

                String[] params =null;;
                if(progress >0)
                    setImage(progress);

            }
        });
    }

    public void setImage(int progress){
            Bitmap bitmap = retriever.getFrameAtTime((int)(33*progress),MediaMetadataRetriever.OPTION_CLOSEST);
    imageView1.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 480, 320, false));

        }

编辑

添加屏幕截图以更好地解释问题。这里我只需要根据帧,videoView 或 mediaPlayer 使用多个图像。

在此处输入图像描述

4

2 回答 2

0

尝试像这样向 ImageView 显示视频的缩略图。

   Bitmap thumb = ThumbnailUtils.createVideoThumbnail(STRING_PATH_OF_VIDEO,MediaStore.Images.Thumbnails.FULL_SCREEN_KIND);
    Matrix matrix = new Matrix();
    Bitmap bitmap = Bitmap.createBitmap(thumb, 0, 0,
            thumb.getWidth(), thumb.getHeight(), matrix, true);
    imageView1.setImageBitmap(bitmap);
于 2013-09-25T07:24:08.023 回答
0

它不起作用,因为分辨率非常高,我只在 UI 线程上渲染它,使用 Asyn 任务解决了我的问题。

public class FetchImageInBackground extends AsyncTask<String, String, Bitmap> {

        @Override
        protected Bitmap doInBackground(String... params) {
            Bitmap bitmap = retriever.getFrameAtTime(iProgress,MediaMetadataRetriever.OPTION_CLOSEST);
            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            setImage(result);
            super.onPostExecute(result);
        }

    }
于 2013-09-30T10:03:37.807 回答