似乎我在线搜索的答案(包括stackoverflow.com)通过图库选择获取图像文件ID。
我创建了自己的文件浏览器。 然后怎么做?
我可以创建自己的小尺寸图像;但我认为如果我们可以利用现有的缩略图会更快;如果它不存在,我宁愿创建一个保存以供以后使用的缩略图。
[更新:] 好的,谢谢你的建议。所以我不会在设备中创建缩略图,以避免使用太多空间。 那么最好做两个步骤: 步骤1:查找图像文件的现有缩略图(如果存在)。 第2步:如果没有缩略图,则创建我自己的小尺寸位图(不保存它)。
如果我不使用Gallery意图,那么如何做第1步?
[更新2:] 我还想获得视频文件的缩略图。 我可以使用MediaMetadataRetriever在任何时间点获取帧,并将图像重新缩放为缩略图。但我发现它很慢:我在文件夹中有4个视频文件,我可以感觉到延迟。
所以我认为检索现有缩略图的更好方法。 如果我只知道文件路径和文件名,我怎么能得到它? 我认为这个问题与我原来的问题相同,只是它更有意义。
答案 0 :(得分:0)
您不应该使用tumbnail的特定文件,尤其是不要创建tumbnails。如果用户拥有大量图像并且您存储了每个图片的缩略图,并且您在浏览器中查看了该图片,该怎么办?这将产生大量重复和不需要的数据。每次调整图像大小的计算量都超过了需要存储的数据量。
我建议您在资源管理器中的图像上有一个默认图标,然后在不同的线程中调整图像大小,在调整大小时替换默认的缩略图。
答案 1 :(得分:0)
您可以动态缩小现有图像的尺寸:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image_path, opts);
int width = opts.outWidth;
int height = opts.outHeight;
然后
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
opts.inDither = true;
opts.inJustDecodeBounds = false;
opts.inSampleSize = (int)Math.pow(2.0,Math.floor(Math.log(scale_factor)/Math.log(2)));//for example double scale_factor=(double)width/desired_dimension;
最后:
Bitmap bm = BitmapFactory.decodeFile(image_path,opts);
您可以加载现有文件的单独线程范围,并在需要时仅更新那些文件。
答案 2 :(得分:0)
您可以使用ThumbnailUtils。查找此实用程序方法。可能不需要太多麻烦就可以满足您的需求。创建重复的缩小图像是一个糟糕的设计,因为它将导致不必要的数据。
Bitmap resizedImage = ThumbnailUtils.extractThumbnail(rescaledImage, imagePixel, imagePixel);