Android相册缩略图的一些探索

原创 2013年11月14日 23:44:25

    最近在做一个应用。里面需要有可以拍照、选择多张相片,上传到网上的功能。上传的就不说了,容易,不是重点。重点让我头痛的是图片选择多张图的问题:

做过的人知道,默认从系统相册中选取相片很容易:

package com.easymorse.gallery;


import java.io.File;


import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class GalleryActivity extends Activity {


    private static int SELECT_PICTURE;


    private File tempFile;


    Button button;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.tempFile=new File("/sdcard/a.jpg");
        button = new Button(this);
        button.setText("获取图片");
        button.setOnClickListener(new OnClickListener() {


            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                intent.putExtra("crop", "true");


                // intent.putExtra("aspectX", 1);
                // intent.putExtra("aspectY", 2);


                intent.putExtra("output", Uri.fromFile(tempFile));
                intent.putExtra("outputFormat", "JPEG");


                startActivityForResult(Intent.createChooser(intent, "选择图片"),
                        SELECT_PICTURE);
            }
        });
        setContentView(button);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                button.setBackgroundDrawable(Drawable.createFromPath(tempFile
                        .getAbsolutePath()));
            }
        }
    }


}


难点是,这个应用需要能一次选取多张照片。于是就不能使用系统相册了。于是我决定自己用GridView写一个自己的类似相册一样展示相片的功能。既然要大面积展示

照片,就要涉及到缩略图的问题了。android系统中有两个表:

存储原图相关信息的表:

android.provider.MediaStore.Images.Media

存储缩略图相关信息的表:

android.provider.MediaStore.Images.Thumbnails

有关它们的关系,看这篇文章:http://blog.csdn.net/java2009cgh/article/details/8364735

按理说,拍摄的每一张相片启动扫描以后,就会在原图里面生成一条记录,并且生成缩略图,放在DCIM/.thumbnails里面,并且将缩略图的地址的地址存放在缩略图表里面。

缩略图表里面的图和原图可以关联上。这就是为什么点击缩略图可以查看到原图了。


  现在情况是这样的,我程序里面调用系统Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 进行拍照,开始的时候,拍的照片在系统相册里面都没有。于是参照上面这篇博客,拍照成功后通过这句代码通知系统启动文件扫描:

      Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
              scanIntent.setData(Uri.fromFile(new File(filePath)));
              scanIntent.sendBroadcast(scanIntent);

关于指定文件扫描具体看http://www.cnblogs.com/wanqieddy/archive/2012/12/05/2802680.html

这一步确实有效,可以在系统相册里面看到我应用里面拍的照片了。

但是,我的应用里面通过Thumbnails表里面查询地址,并通过cursor拿缩略图却没有。事实上,我把开数据库,也确实没有生成记录,在SD卡DCIM/.thumbnails中也没有生成

对应的缩略图。由此可见:1、启动扫描不只能保证照片的原图会记录到表中,但却不保证能生成缩略图。2、系统相册我们看到的缩略图不是从SD卡DCIM/.thumbnails中读取的。

  后来,进一步发现,不用我的应用里面拍照,而是直接从相机应用里拍照,默认会生成记录到原图表中,但不会生成缩略图。于是乎,我们的程序从缩略图表中读数据,又读不到了。但系统相册还是有缩略图。系统相册的缩略图是怎么得到的呢?

我也尝试自己生成缩略图,那就是拿到原图的_ID然后通过这句代码,手动生成缩略图:MediaStore.Images.Thumbnails.getThumbnail(contentResolver, id,  Images.Thumbnails.MICRO_KIND, options)  从相机中拍的照片,会生成_ID,然后用这个ID去生成缩略图,问题解决了一半儿。从相机应用中拍的照片缩略图终于可以读出来了。但还有一个问题,那就是,在我的应用中刚拍的照片,得不到它的_ID。怎么去拿缩略图呢?


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

【Android】缩略图Thumbnails

【Android】缩略图Thumbnails 在Android,多媒体文件(视频和图片)都是有缩略图的,在很多应用中,我们需要获取这些缩略图。比如最近在做一个类似相册的应用,需要扫描相册里面的图片,...
  • java2009cgh
  • java2009cgh
  • 2012年12月21日 17:08
  • 18216

Android相册缩略图的一些探索

最近在做一个应用。里面需要有可以拍照、选择多张相片,上传到网上的功能。上传的就不说了,容易,不是重点。重点让我头痛的是图片选择多张图的问题: 做过的人知道,默认从系统相册中选取相片很容易: packa...
  • nnmmbb
  • nnmmbb
  • 2013年11月14日 23:44
  • 6127

Android 实现图片、视频即时更新到相册

照片更新到相册:                          用此方法即可。一行代码。 sendBroadcast(new Intent(Intent.ACTION...
  • sinat_25905143
  • sinat_25905143
  • 2017年09月12日 09:47
  • 509

Android 获取系统相册里的照片及缩略图

原文链接:http://duguyidao.iteye.com/blog/1074012   在上次关于使用GridView显示Sdcard中的图片Thumbnail图片,然后点击再显示原始图片。在...
  • muzhengjun
  • muzhengjun
  • 2015年07月14日 17:16
  • 2564

android调用相机,相册里不显示缩略图问题

android调用相机,之前一直以为是因为保存问题,后来,查看了下目录是有图片的,只是没有缩略图,导致相册没有看到,查看了下文档,原来需要刷新一下 如下: protected void onActiv...
  • u010660651
  • u010660651
  • 2016年12月20日 16:12
  • 396

Android 获取最近应用的缩略图

最近有项需求是获取应用的缩略,用于在动画时显示。因此就对此块知识简要了解了一下。 在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 新视频增加后需要SDCard重新扫描才能给...
  • andyhuabing
  • andyhuabing
  • 2013年10月12日 17:08
  • 8015

android缩略图点击后预览大图

  • 2015年03月02日 16:42
  • 1.51MB
  • 下载

android取缩略图

// 获取图片的缩略图,宽度和高度中较小的缩放到vMinWidth. 确保宽度和高度最小的都能覆盖到, //比如图片是3000*2000,要缩放到 150*100, 那么vMinWidth=10...
  • wuzuyu365
  • wuzuyu365
  • 2016年01月26日 18:16
  • 243

Android获取本地图片缩略图终极解决方案

QAQ学Android真的还是要在项目中获得锻炼,脱离实际一切都是耍流氓哼唧~! 花了一下午时间搞定了项目中要实现的获取本地图片缩略图并显示在ListView上的,并且点击要能获得该图片文件路径功能,...
  • qq_22770457
  • qq_22770457
  • 2016年05月24日 20:43
  • 13895

图片上传制作缩略图--类似手机相册

图片上传制作缩略图--类似手机相册 -- 漠‘’随心
  • u014037646
  • u014037646
  • 2016年06月16日 11:47
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android相册缩略图的一些探索
举报原因:
原因补充:

(最多只允许输入30个字)