我正在尝试使用 MediaMetadataRetriever 从视频中将图像设置为imageView。
每当我移动搜索栏时,我都会使用框架并尝试使用
显示它mediaMetadataRetriever.getFrameAtTime((int)(33*10),MediaMetadataRetriever.OPTION_CLOSEST);
第一次工作正常,但是当我使用搜索栏的进度再次尝试时,它无效。以下是我的代码。
@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。
答案 0 :(得分:1)
尝试将此视频缩略图显示给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);
答案 1 :(得分: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);
}
}