Android Thumbnail Images
在上次关于使用GridView显示Sdcard中的图片Thumbnail图片,然后点击再显示原始图片。在上次的代码中我是通过直接对原始图片进行了Scale制作为100*80的图片,然后显示出来,这样操作的话,当处理大图片的时候会浪费大量的VM内存,所以在上次提出了使用DCIM中thumbnail的缩略图文件的方法,这里图片的尺寸一般都在10-50k的大小。
接着上次关于显示Thumbnails的问题,这里针对如何获取Android thumbnails的图片以及如何和原始图片关联,说先看一下手机内部SDcard中的Thumbnail文件(参照附件1),使用Linux下的 ls -a 命令显示隐藏文件。
提取图片和视频缩略图可以直接访问 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails这两个数据库,即可查询出来缩略图
如何判断文件呢? 可以通过Cursor遍历数据库,对比INTERNAL_CONTENT_URI字段的值,这是一个Uri我们可以转成String,这里保存着Android手机SD卡上的多媒体文件完整路径,有关具体的缩略图可 以通过getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options) 或getThumbnail(ContentResolver cr, long origId, long groupId, int kind, BitmapFactory.Options options) 方法获取,这两种方法返回Bitmap类型,而缩略图的分辨率可以从HEIGHT和WIDTH两个字段提取,在Android上缩略图分为两种,通过读取 KIND字段来获得,分别为MICRO_KIND和MINI_KIND 分别为微型和迷你两种缩略模式,前者的分辨率更低。这样我们平时获取文件系统的某个图片预览时,可以直接调用系统缩略图,而不用自己重新计算。
在这里我们先看一下android系统是如何存放Thumbnail图片以及其原始图片的。
大家可以先检查一下/data/data/com.android.provider.media目录下面的databases:external-1014121a.db 和 internal.db(可参看附件2)。
因为存储于Sdcard属于外部存储,主要信息存储于external*.db,我们查看一下此数据库的表信息。其中主要关注images 和 thumbnails 两个表。
查看两个表的数据我们可以看出Thumbnails图片和原始图片之间的映射关系。
从上面两个表中可以看出,表thumbnails和Image 之间的关联是通过image_id实现的,通过会这个_id,就可以找出来thumbnails表中的图片和images表中图片的映射关系了。可以就可以获取到原始图片的位置,字段为images表中的_data字段的值。
参考代码可以查看过程
package com.daisy.android.components;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.provider.MediaStore.Images.Thumbnails;
import android.provider.MediaStore.Images.Media;
/**
*@author Andrew.Lee
*@create 2011-6-9 下午01:17:03
*@version 1.0
*@see
*/
public class ThumbnailActivity extends Activity {
public static String TAG = "Thumbnails";
private GridView gridView;
private ArrayList<HashMap<String, String>> list;
private ContentResolver cr;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
}
private void findViews() {
gridView = (GridView) findViewById(R.id.gridview);
list = new ArrayList<HashMap<String, String>>();
cr = getContentResolver();
String[] projection = { Thumbnails._ID, Thumbnails.IMAGE_ID,
Thumbnails.DATA };
Cursor cursor = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projection,
null, null, null);
getColumnData(cursor);
String[] from = { "path" };
int[] to = { R.id.imageView };
ListAdapter adapter = new GridAdapter(this, list, R.layout.item, from,
to);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(listener);
}
private void getColumnData(Cursor cur) {
if (cur.moveToFirst()) {
int _id;
int image_id;
String image_path;
int _idColumn = cur.getColumnIndex(Thumbnails._ID);
int image_idColumn = cur.getColumnIndex(Thumbnails.IMAGE_ID);
int dataColumn = cur.getColumnIndex(Thumbnails.DATA);
do {
// Get the field values
_id = cur.getInt(_idColumn);
image_id = cur.getInt(image_idColumn);
image_path = cur.getString(dataColumn);
// Do something with the values.
Log.i(TAG, _id + " image_id:" + image_id + " path:"
+ image_path + "---");
HashMap hash = new HashMap();
hash.put("image_id", image_id + "");
hash.put("path", image_path);
list.add(hash);
} while (cur.moveToNext());
}
}
OnItemClickListener listener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
String image_id = list.get(position).get("image_id");
Log.i(TAG, "---(^o^)----" + image_id);
String[] projection = { Media._ID, Media.DATA };
Cursor cursor = cr.query(Media.EXTERNAL_CONTENT_URI, projection,
Media._ID + "=" + image_id, null, null);
if (cursor != null) {
cursor.moveToFirst();
String path = cursor.getString(cursor
.getColumnIndex(Media.DATA));
Intent intent = new Intent(ThumbnailActivity.this,
ImageViewer.class);
intent.putExtra("path", path);
startActivity(intent);
} else {
Toast.makeText(ThumbnailActivity.this, "Image doesn't exist!",
Toast.LENGTH_SHORT).show();
}
}
};
class GridAdapter extends SimpleAdapter {
public GridAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
// TODO Auto-generated constructor stub
}
// set the imageView using the path of image
public void setViewImage(ImageView v, String value) {
try {
Bitmap bitmap = BitmapFactory.decodeFile(value);
Bitmap newBit = Bitmap
.createScaledBitmap(bitmap, 100, 80, true);
v.setImageBitmap(newBit);
} catch (NumberFormatException nfe) {
v.setImageURI(Uri.parse(value));
}
}
}
}
- 大小: 52.2 KB
- 大小: 82.8 KB
- 大小: 36.4 KB
- 大小: 213.7 KB
分享到:
相关推荐
jQuery thumbnail 惟美的图片Tip提示效果,鼠标放到每一个格子上面,立即变换成文字,提示图片的内容,一时半会还不知如何形容这种效果,自己下载看吧。
Android图片框架Glide-3.7.0(最新,很强大),超好用的图片框架(包含jar和源码) Glide 是一个高效、开源、 Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频...
jQuery thumbnail 惟美的图片Tip提示效果 jQuery thumbnail 惟美的图片Tip提示效果
基于ASP.NET+C#实现的Image thumbnail 图片缩微处理程序例子代码。
读取文件夹下图片生成略缩图并点击显示大图
Glide能够支持Android设备中的所有视频剧照的加载和展示缩略图的支持: 为了减少在同一个view组件里同时加载多张图片的时间,可以调用Glide.with(context).load(“图片路径“).thumbnail(“缩略比例“).into(“view...
BlurImageView For Android, you can load your image progressively like Medium. How it works? First it will show user a blurry image; At the same time, it starts to load the real image; once loaded, ...
Exif缩略图添加器这是一个适用于android设备的应用程序,它将在您的设备上搜索图片(JPEG),如果还没有缩略图,则在EXIF标签中添加缩略图。 它应该可以在android Oreo(android 8,SDK 26)上运行,并且已经在运行...
开发语言:C# metro 开发平台:visual studio 2013 主要功能: 1、选择某一文件夹 2、将文件夹下的所有图片显示到gridview上
今天我们要给大家介绍一款相对比较实用的jQuery焦点图插件,这款焦点图插件的特点有2个,一个是每一张图片都有一个同比例尺寸的缩略图,所有缩略图都排列在下方,点击缩略图即可切换到对应的图片;另外一个特点是...
科尔多瓦插件视频缩略图获取本地视频的预设使用插件方法: videoThumbnail.build 参数: 成功回调函数错误回调函数配置对象window . plugins . videoThumbnail . build ( function ( data ) { console . log ( data ...
Thumbnails 纯java图片压缩api 包括文档及相关学习资料,算法高效,压缩效率高。
Glide是一款图片加载框架,可以在Android平台上以简单的方式加载和展示图片。 dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' } 在清单文件中加入权限 <uses android:name=android.permission....
Sketch是Android上层强大且全面的图片加载器,除了图片加载的必备功能外,还支持GIF,手势缩放,分块显示超大图片,自动校正图片方向,显示视频片段等功能 示例APP 扫描二维码下载或 特性 支持的特性 多种 URI 支持...
前端项目-lg-thumbnail,LightGallery的缩略图模块。
帮你快速的建立HTML网页相簿或图库,提供了基本的设置和HTML的模板,但你也可以自己修改版面,建立自己的模板,完成后就可以导出HTML文件,支持各种图像格式(jpg,gif,tiff,bmp,png等)。
方便查看thumbs.db. ehthumbs.db, thumbcache_*.db files等缩略图文件的源代码
以缩略图的形式在Windows资源浏览器中显示自定义格式图片
Thumbnail.js #0.1 背景介绍 利用javascript控制图片在固定容器中显示方式的组件 有两种情况: 图片宽度大于高度,这种图片的显示方式是高度100%,宽度auto,水平居中在父容器中显示,隐藏超出部分。 图片宽度小于...
JQuery with dialog box prompt photo album, support to click the picture left-right switch, with thumbnail preview