Android - 视频文件的缩略图
Android - Thumbnail from video file
我目前有一个应用程序,用户可以在其中单击浮动操作按钮并选择一个视频文件,然后将该文件保存到不同的文件夹中。然后我想显示所有视频的缩略图。我看过一个使用 MediaStore 完成的教程系列,但是我无法设置 uri 的路径。
有人能给我指出正确的方向吗?
这是我 class 打开图库并将视频保存到不同路径的方法:
public class Activity extends AppCompatActivity {
private static final int pick = 100;
Uri videoUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openGallery();
}
});
}
private void openGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, pick);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == pick) {
try
{
Log.e("videopath","videopath");
AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(data.getData(), "r");
FileInputStream fis = videoAsset.createInputStream();
File root=new File(Environment.getExternalStorageDirectory(),"MYFOLDER");
if (!root.exists()) {
root.mkdirs();
}
File file;
file=new File(root,"android_"+System.currentTimeMillis()+".mp4" );
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) > 0) {
fos.write(buf, 0, len);
}
fis.close();
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
videoUri = data.getData();
}
}
}
您可以使用 Glide
轻松完成:
Glide.with(context).load(videoPath).asBitmap().into(imageView);
您可以使用 Android 中的 ThumbnailUtils
class 来实现此目的。
public static Bitmap createVideoThumbnail (String filePath, int kind)
此方法returns视频的位图。
- 第一个参数是文件路径,即要作为字符串传递的视频文件的位置。
第二个参数是你需要的位图的种类,有两种:
MediaStore.Images.Thumbnails.MICRO_KIND
生成大小为 96 x 96 的缩略图
MediaStore.Images.Thumbnails.MINI_KIND
生成大小为 512 x 384 的缩略图。
例如:
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);
这里是 API 文档以获取更多信息[Here]。
我目前有一个应用程序,用户可以在其中单击浮动操作按钮并选择一个视频文件,然后将该文件保存到不同的文件夹中。然后我想显示所有视频的缩略图。我看过一个使用 MediaStore 完成的教程系列,但是我无法设置 uri 的路径。
有人能给我指出正确的方向吗?
这是我 class 打开图库并将视频保存到不同路径的方法:
public class Activity extends AppCompatActivity {
private static final int pick = 100;
Uri videoUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openGallery();
}
});
}
private void openGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, pick);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == pick) {
try
{
Log.e("videopath","videopath");
AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(data.getData(), "r");
FileInputStream fis = videoAsset.createInputStream();
File root=new File(Environment.getExternalStorageDirectory(),"MYFOLDER");
if (!root.exists()) {
root.mkdirs();
}
File file;
file=new File(root,"android_"+System.currentTimeMillis()+".mp4" );
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) > 0) {
fos.write(buf, 0, len);
}
fis.close();
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
videoUri = data.getData();
}
}
}
您可以使用 Glide
轻松完成:
Glide.with(context).load(videoPath).asBitmap().into(imageView);
您可以使用 Android 中的 ThumbnailUtils
class 来实现此目的。
public static Bitmap createVideoThumbnail (String filePath, int kind)
此方法returns视频的位图。
- 第一个参数是文件路径,即要作为字符串传递的视频文件的位置。
第二个参数是你需要的位图的种类,有两种:
MediaStore.Images.Thumbnails.MICRO_KIND
生成大小为 96 x 96 的缩略图
MediaStore.Images.Thumbnails.MINI_KIND
生成大小为 512 x 384 的缩略图。
例如:
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND);
这里是 API 文档以获取更多信息[Here]。