在给定位置为 ImageView 中的视频生成缩略图
Generating thumbnail for videos in ImageView at a given position
下面的代码运行良好,其生成图像缩略图 来自 给定的 视频 [=21] =],但我想知道,是否有可能在假设 100 毫秒时生成视频缩略图,因为默认情况下它在开始位置生成缩略图,所以如果开始时视频屏幕是黑色的,那么缩略图也会显示黑色所以看起来很奇怪。那么有没有可能通过跳过几毫秒来获得缩略图。
public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
String path;
public DownloadImage(ImageView bmImage, String path) {
this.bmImage = (ImageView ) bmImage;
this.path=path;
}
protected Bitmap doInBackground(String... urls) {
Bitmap myBitmap = null;
MediaMetadataRetriever mMRetriever = null;
try {
mMRetriever = new MediaMetadataRetriever();
if (Build.VERSION.SDK_INT >= 14)
mMRetriever.setDataSource(path, new HashMap<String, String>());
else
mMRetriever.setDataSource(path);
myBitmap = mMRetriever.getFrameAtTime();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (mMRetriever != null) {
mMRetriever.release();
}
}
return myBitmap;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
您可以使用 MediaMetadataRetriever
的其他重载方法来获取特定时间的帧。
public Bitmap getFrameAtTime(long timeUs, int option) {
throw new RuntimeException("Stub!");
}
public Bitmap getFrameAtTime(long timeUs) {
throw new RuntimeException("Stub!");
}
public Bitmap getFrameAtTime() {
throw new RuntimeException("Stub!");
}
下面的代码运行良好,其生成图像缩略图 来自 给定的 视频 [=21] =],但我想知道,是否有可能在假设 100 毫秒时生成视频缩略图,因为默认情况下它在开始位置生成缩略图,所以如果开始时视频屏幕是黑色的,那么缩略图也会显示黑色所以看起来很奇怪。那么有没有可能通过跳过几毫秒来获得缩略图。
public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
String path;
public DownloadImage(ImageView bmImage, String path) {
this.bmImage = (ImageView ) bmImage;
this.path=path;
}
protected Bitmap doInBackground(String... urls) {
Bitmap myBitmap = null;
MediaMetadataRetriever mMRetriever = null;
try {
mMRetriever = new MediaMetadataRetriever();
if (Build.VERSION.SDK_INT >= 14)
mMRetriever.setDataSource(path, new HashMap<String, String>());
else
mMRetriever.setDataSource(path);
myBitmap = mMRetriever.getFrameAtTime();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (mMRetriever != null) {
mMRetriever.release();
}
}
return myBitmap;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
您可以使用 MediaMetadataRetriever
的其他重载方法来获取特定时间的帧。
public Bitmap getFrameAtTime(long timeUs, int option) {
throw new RuntimeException("Stub!");
}
public Bitmap getFrameAtTime(long timeUs) {
throw new RuntimeException("Stub!");
}
public Bitmap getFrameAtTime() {
throw new RuntimeException("Stub!");
}