转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以便以后学习和查询!

上一篇中实例讲解了Android中的Camera的调用和图片的存储,这篇文章,我们将学习如何检索并显示媒体库中的图片。

这里有个问题需要注意,如果你在模拟器已经启动的情况下,push了几张图片到SDCard中,建议将模拟器关了,再重新启动

一下,否则,刚刚添加的图片,是没有办法获取到的。这是因为Android是在系统启动的时候来扫描模拟器上SDCard中多媒体文件的。

闲话少说,看代码:

package demo.camera;import android.app.Activity;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.provider.MediaStore.Images.Media;import android.util.Log;import android.view.View;import android.widget.ImageButton;import android.widget.TextView;/** * 该类完成图片的检索,显示功能 * @author Administrator * */public class PhotoManager extends Activity {public static final float DISPLAY_WIDTH = 200;public static final float DISPLAY_HEIGHT = 200;//这里采用ImageButton的原因是有Button的作用private ImageButton photoView;private TextView nameView;private Cursor cursor;private String photoPath; //存放某张图片对应的位置信息private Bitmap currPhoto;//这三个变量主要用来保存Media.DATA,Media.TITLE,Media.DISPLAY_NAME的索引号,来获取每列的数据private int photoIndex;//private int titleIndex;private int nameIndex;public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.photo_view);photoView = (ImageButton)this.findViewById(R.id.image_view);photoView.setOnClickListener(clickListener);nameView = (TextView)this.findViewById(R.id.view_name);//指定获取的列String columns[] = new String[]{Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};//cursor = this.managedQuery(Media.EXTERNAL_CONTENT_URI, columns, null, null, null);cursor = this.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, null, null, null);photoIndex = cursor.getColumnIndexOrThrow(Media.DATA);//titleIndex = cursor.getColumnIndexOrThrow(Media.TITLE);nameIndex = cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);Log.v("HERE First:", "First Debug");//显示第一张图片,但是首先要判断一下,Cursor是否有值if(cursor.moveToFirst()){showImage();}}private View.OnClickListener clickListener = new View.OnClickListener() {@Overridepublic void onClick(View v) {if(cursor.moveToNext()){showImage();}}};/** * 显示图像信息 */private void showImage(){photoPath = cursor.getString(photoIndex); //这里获取到的就是图片存储的位置信息//这里怎样获取图片呢?看decodeBitmapLog.v("Photo Path:", photoPath);currPhoto = decodeBitmap(photoPath);photoView.setImageBitmap(currPhoto);nameView.setText(cursor.getString(nameIndex));}/** * 从path中获取图片信息 * @param path * @return */private Bitmap decodeBitmap(String path){BitmapFactory.Options op = new BitmapFactory.Options();op.inJustDecodeBounds = true;Bitmap bmp = BitmapFactory.decodeFile(path, op); //获取尺寸信息//获取比例大小int wRatio = (int)Math.ceil(op.outWidth/DISPLAY_WIDTH);int hRatio = (int)Math.ceil(op.outHeight/DISPLAY_HEIGHT);//如果超出指定大小,则缩小相应的比例if(wRatio > 1 && hRatio > 1){if(wRatio > hRatio){op.inSampleSize = wRatio;}else{op.inSampleSize = hRatio;}}op.inJustDecodeBounds = false;bmp = BitmapFactory.decodeFile(path, op);return bmp;}}

转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以

便以后学习和查询!


学习总结:


1、默认保存图片的sdcard的URI是:Media.EXTERNAL_CONTENT_URI

2、保存图片的URI中常用的columns有

Media.DATA, //图片的路径
Media._ID,//图片的ID
Media.TITLE,//图片的标题
Media.DISPLAY_NAME //图片的描述

3、要按比例显示图片,需要知道原始图片的大小


BitmapFactory.Options op = new BitmapFactory.Options();
op.inJustDecodeBounds = true; //设置为调试图片范围(这个值必须设置)
//把图片的信息付给了BitmapFactory.Options,同时包括宽和高
Bitmap bmp = BitmapFactory.decodeFile(path, op);

4、设置缩放比例


//获取比例大小
int wRatio = (int)Math.ceil(op.outWidth/DISPLAY_WIDTH);
int hRatio = (int)Math.ceil(op.outHeight/DISPLAY_HEIGHT);
//如果超出指定大小,则缩小相应的比例
if(wRatio > 1 && hRatio > 1){
op.inSampleSize = Math.max(wRatio,hRatio);
}

5、实现图片对象获取


//这个值与前面的 op.inJustDecodeBounds = true;对应
//设置为不是调试图片范围
op.inJustDecodeBounds = false;
//创建图片对象
bmp = BitmapFactory.decodeFile(path, op);

更多相关文章

  1. Android工作学习笔记之图片自适应imageview属性android:scaleTyp
  2. android图片压缩总结
  3. 从网络获取图片,并缓存到SD卡
  4. Android利用系统提供的函数或常量判断版本大小
  5. ionic3 图片选取imagepicker以及camera汉化
  6. Android修改图片颜色-转成灰度图
  7. Android ImageView设置长度高度为wrap_content时高度根据图片比

随机推荐

  1. Android(安卓)Binder框架实现之bindServi
  2. Android(安卓)选择图片,加载图片,显示图片
  3. [译]Android开发之究竟使用哪个布局
  4. android 多线程 UI 入门
  5. Android(安卓)display架构分析(5-8)
  6. ListView的OnItemClickListener事件被其
  7. 第八次课——数据存储方式
  8. Android(安卓)的消息机制(4)
  9. android mtk6592 添加led三色灯,红色蓝色
  10. Android6.0 MountService和vold详解(三) vo