VideoBitmapDecoder 不接受 int (Android-Glide)
VideoBitmapDecoder doesn't accept int (Android-Glide)
我正在尝试使用从 中找到的以下代码在特定时间保存视频的缩略图,但 VideoBitmapDecoder 不接受 int 参数。它只接受 Context 或 BitmapPool。我该怎么办?
BitmapPool bitmapPool = Glide.get(getApplicationContext()).getBitmapPool();
int microSecond = 6000000;// 6th second as an example
VideoBitmapDecoder videoBitmapDecoder = new VideoBitmapDecoder(microSecond);
FileDescriptorBitmapDecoder fileDescriptorBitmapDecoder = new FileDescriptorBitmapDecoder(videoBitmapDecoder, bitmapPool, DecodeFormat.PREFER_ARGB_8888);
Glide.with(getApplicationContext()) .load(yourUri)
.asBitmap()
.override(50,50)//
.videoDecoder(fileDescriptorBitmapDecoder) .into(yourImageView);
根本原因:他们从 Glide v4 更改了 API,所以我会给你 2 个选项来解决你的问题。
选项 1: 保留当前代码并更改 app.gradle
文件中的 Glide 依赖项版本。
// implementation 'com.github.bumptech.glide:glide:4.8.0'
// annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
implementation 'com.github.bumptech.glide:glide:3.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:3.8.0'
选项 2: 将当前的 Glide 依赖项保留在 app.gradle
文件中并更改您的代码。
int microSecond = 6000000;// 6th second as an example
RequestOptions options = new RequestOptions().frame(microSecond).override(50, 50);
Glide.with(getApplicationContext())
.asBitmap()
.load(videoUri)
.apply(options)
.into(yourImageView);
更新:如果你想处理不在视图上显示的位图
Glide.with(getApplicationContext())
.asBitmap()
.load(videoUri)
.apply(options)
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap bitmap, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
// TODO: Process your bitmap here
return false;
}
})
.submit();
我正在尝试使用从
BitmapPool bitmapPool = Glide.get(getApplicationContext()).getBitmapPool();
int microSecond = 6000000;// 6th second as an example
VideoBitmapDecoder videoBitmapDecoder = new VideoBitmapDecoder(microSecond);
FileDescriptorBitmapDecoder fileDescriptorBitmapDecoder = new FileDescriptorBitmapDecoder(videoBitmapDecoder, bitmapPool, DecodeFormat.PREFER_ARGB_8888);
Glide.with(getApplicationContext()) .load(yourUri)
.asBitmap()
.override(50,50)//
.videoDecoder(fileDescriptorBitmapDecoder) .into(yourImageView);
根本原因:他们从 Glide v4 更改了 API,所以我会给你 2 个选项来解决你的问题。
选项 1: 保留当前代码并更改 app.gradle
文件中的 Glide 依赖项版本。
// implementation 'com.github.bumptech.glide:glide:4.8.0'
// annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
implementation 'com.github.bumptech.glide:glide:3.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:3.8.0'
选项 2: 将当前的 Glide 依赖项保留在 app.gradle
文件中并更改您的代码。
int microSecond = 6000000;// 6th second as an example
RequestOptions options = new RequestOptions().frame(microSecond).override(50, 50);
Glide.with(getApplicationContext())
.asBitmap()
.load(videoUri)
.apply(options)
.into(yourImageView);
更新:如果你想处理不在视图上显示的位图
Glide.with(getApplicationContext())
.asBitmap()
.load(videoUri)
.apply(options)
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap bitmap, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
// TODO: Process your bitmap here
return false;
}
})
.submit();