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调用相机,相册里不显示缩略图问题

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

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

原文链接:http://duguyidao.iteye.com/blog/1074012   在上次关于使用GridView显示Sdcard中的图片Thumbnail图片,然后点击再显示原始图片。在...

【Android】缩略图Thumbnails

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

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

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

Android 获取SDCard上图片和视频的缩略图

获取图片缩略图和视频缩略图的方法:    Java代码: import java.io.File; import android.app.Activity; import android....
  • akon_vm
  • akon_vm
  • 2012年04月01日 14:50
  • 44405

android - 使用缩略图

一. 主要是通过BitmapFactory.Options 来实现。 Options中有个属性inJustDecodeBounds。我们可以充分利用它,来避免大图片的溢出问题。他是什么原理呢? API...

在自己的app中打开淘宝

需求:在app中打开淘宝客户端,包括打开店铺和商品 1)打开商品: Intent intent = new Intent(); intent.setAction(“android.intent....

LeetCode 刷题之二:寻找二叉树的最大深度

题目为: Given a binary tree, find its maximum depth. The maximum depth is the number of nodes a...

Android ImageUtils 图片工具类,包括:小米从相册调图像空指针,三星旋转照片,压缩图片,保存Bitmap到本地,获取本地视频的缩略图,毛化玻璃效果,代码以后会更新

Android,图片处理
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android相册缩略图的一些探索
举报原因:
原因补充:

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