发现通过getThumbnail获取的图片实际上是图片信息Exif里的Thumbnails图 但是分析getThumbnail源码又没发现里面有取Exif里的Thumbnails图的逻辑,有没有人帮忙看看这段源码分析下它的逻辑 如果图片里Exif里Thumbnails图没有 它又会怎么取图
bitmap = Images.Thumbnails.getThumbnail(resolver, image.idImages.Thumbnails.MINI_KIND, null);
/**
*返回代表特定图像项的缩略图。如果缩略图不存在,则此方法将阻塞,直到生成缩略图为止。
*调用者对自己的内存负责缓存返回值。
*从{@link android.os.Build.VERSION_CODES#Q}开始,缩略图的输出具有正确的旋转,不需要再次旋转。
*@param imageId 要获取缩略图的图像项。
*@param 类型所需的最佳缩略图大小。
*@return 解码后的缩略图,如果遇到问题则返回 {@code null}。
*@deprecated 调用者应该迁移到使用 {@link ContentResolver#loadThumbnail},
*因为它可以对请求的缩略图大小和取消行为提供更丰富的控制。
*/
@Deprecated
public static Bitmap getThumbnail(ContentResolver cr, long imageId, int kind,
BitmapFactory.Options options) {
final Uri uri = ContentUris.withAppendedId(
Images.Media.EXTERNAL_CONTENT_URI, imageId);
return InternalThumbnails.getThumbnail(cr, uri, kind, options);
}
/**
*发出阻塞请求以获取给定的缩略图,并在需要时生成它。
*/
@Deprecated
static @Nullable Bitmap getThumbnail(@NonNull ContentResolver cr, @NonNull Uri uri,
int kind, @Nullable BitmapFactory.Options opts) {
final Size size = ThumbnailConstants.getKindSize(kind);
CancellationSignal signal = null;
synchronized (sPending) {
signal = sPending.get(uri);
if (signal == null) {
signal = new CancellationSignal();
sPending.put(uri, signal);
}
}
try {
return cr.loadThumbnail(uri, size, signal);
} catch (IOException e) {
Log.w(TAG, "Failed to obtain thumbnail for " + uri, e);
} finally {
synchronized (sPending) {
sPending.remove(uri);
}
}
}