Bitmap

加载大图片到内存

public class MainActivity extends Activity {

 private ImageView iv_img;

 private int windowHeight;

 private int windowWidth;

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  this.iv_img = (ImageView) this.findViewById(R.id.iv_img);

  WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

  // 第一种获取手机屏幕宽高的方法

  this.windowHeight = manager.getDefaultDisplay().getHeight();

  this.windowWidth = manager.getDefaultDisplay().getWidth();

  System.out.println("手机宽 :" + this.windowWidth);

  System.out.println("手机高 :" + this.windowHeight);

 

  // 第二种获取手机屏幕宽高的方法,但是getSize()是从 API Level 13才有的方法

  // Point outSize = new Point();

  // manager.getDefaultDisplay().getSize(outSize );

  // this.windowWidth = outSize.x;

  // this.windowHeight = outSize.y;

 }

 

 public void load1(View view) {

  String src = "mnt/sdcard/DSC.jpg";

  Bitmap bitmap = BitmapFactory.decodeFile(src);

  this.iv_img.setImageBitmap(bitmap);

 }

 

 public void load2(View view) {

  String src = "mnt/sdcard/DSC.jpg";

 

  // 图片解析的配置

  Options options = new Options();

  // 不去真正解析图片,只是获取图片的宽高

  options.inJustDecodeBounds = true;

  BitmapFactory.decodeFile(src, options);

  int imageWidth = options.outWidth;

  int imageHeight = options.outHeight;

  System.out.println("图片宽 :" + imageWidth);

  System.out.println("图片高 :" + imageHeight);

 

  int scaleX = imageWidth / this.windowWidth;

  int scaleY = imageHeight / this.windowHeight;

  int scale = 1;

  if (scaleX >= scaleY && scaleX >= 1) {

   // 水平方向的缩放比例比竖直方向的缩放比例大,同时图片的宽要比手机屏幕要大,就按水平方向比例缩放

   System.out.println("按宽比例缩放");

   scale = scaleX;

  } else if (scaleY >= scaleX && scaleY >= 1) {

   // 竖直方向的缩放比例比水平方向的缩放比例大,同时图片的高要比手机屏幕要大,就按竖直方向比例缩放

   System.out.println("按高比例缩放");

   scale = scaleY;

  }

  System.out.println("缩放比例:" + scale);

  // 真正解析图片

  options.inJustDecodeBounds = false;

  // 设置采样率

  options.inSampleSize = scale;

  Bitmap bitmap = BitmapFactory.decodeFile(src,options);

  this.iv_img.setImageBitmap(bitmap);

 

 }

}

 

获取图片exif信息

public class MainActivity extends Activity {

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

 }

 

 public void read(View view) {

  try {

 

   /*

    * ExifInterface.TAG_APERTURE:光圈

    * ExifInterface.TAG_DATETIME:拍摄日期

    * ExifInterface.TAG_EXPOSURE_TIME:曝光时间

    * ExifInterface.TAG_FLASH:闪光灯

    * ExifInterface.TAG_FOCAL_LENGTH:焦距

    * ExifInterface.TAG_GPS_ALTITUDE:海拔

    * ExifInterface.TAG_GPS_ALTITUDE_REF:海拔参数

    * ExifInterface.TAG_GPS_DATESTAMP

    */

   String src = "mnt/sdcard/DCIM/Camera/IMG_20130718_164129.jpg";

// src = "mnt/sdcard/dog.jpg";

   ExifInterface exif = new ExifInterface(src);

// String make = exif. getAttribute(ExifInterface.TAG_MAKE);

// String model = exif.getAttribute(ExifInterface.TAG_MODEL);

// String datetime = exif.getAttribute(ExifInterface.TAG_DATETIME);

// Toast.makeText(this, "制造商: " + make, 0).show();

// Toast.makeText(this, "相机类型: " + model, 0).show();

// Toast.makeText(this, "拍摄日期:" + datetime, 0).show();

// System.out.println(exif.getAttribute(ExifInterface.TAG_APERTURE));

   System.out.println(exif.getAttribute(ExifInterface.TAG_DATETIME));

// System.out.println(exif.getAttribute(ExifInterface.TAG_EXPOSURE_TIME));

   System.out.println(exif.getAttribute(ExifInterface.TAG_FLASH));

   System.out.println(exif.getAttribute(ExifInterface.TAG_FOCAL_LENGTH));

// System.out.println(exif.getAttribute(ExifInterface.TAG_GPS_ALTITUDE));

// System.out.println(exif.getAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF));

   System.out.println(exif.getAttribute(ExifInterface.TAG_GPS_DATESTAMP));

   System.out.println(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE));

   System.out.println(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF));

   System.out.println(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE));

   System.out.println(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF));

   System.out.println(exif.getAttribute(ExifInterface.TAG_IMAGE_LENGTH));

   System.out.println(exif.getAttribute(ExifInterface.TAG_IMAGE_WIDTH));

// System.out.println(exif.getAttribute(ExifInterface.TAG_ISO));

   System.out.println(exif.getAttribute(ExifInterface.TAG_MAKE));

   System.out.println(exif.getAttribute(ExifInterface.TAG_MODEL));

   System.out.println(exif.getAttribute(ExifInterface.TAG_ORIENTATION));

   System.out.println(exif.getAttribute(ExifInterface.TAG_WHITE_BALANCE));

  } catch (Exception e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

 }

}

 

从gallery获取图片

查看系统gallery应用的源码:

在清单文件中,我们发现可以通过android.intent.action.PICK这个action来从图库选择一张图片

<activity android:name="com.android.camera.ImageGallery"

                android:label="@string/gallery_label"

                android:configChanges="orientation|keyboardHidden"

                android:icon="@drawable/ic_launcher_gallery">

            .......

            <intent-filter>

                <action android:name="android.intent.action.PICK" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="image/*" />

                <data android:mimeType="video/*" />

            </intent-filter>

          .......

           

</activity>

       

再查看com.android.camera.ImageGallery类发现,图库会返回图片的全路径和图片的缩略图给我们

Intent result = new Intent(null, img.fullSizeImageUri());

            if (myExtras != null && myExtras.getBoolean("return-data")) {

                // The size of a transaction should be below 100K.

                Bitmap bitmap = img.fullSizeBitmap(

                        IImage.UNCONSTRAINED, 100 * 1024);

                if (bitmap != null) {

                    result.putExtra("data", bitmap);

                }

根据上边的信息,我们可以编写一下代码来获取图库的某种图片

public class MainActivity extends Activity {

 private ImageView iv_image;

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  this.iv_image = (ImageView) this.findViewById(R.id.iv_image);

 }

 

 public void load(View view) {

  // 激活系统图库,选择一张图片

  Intent intent = new Intent();

  intent.setAction(Intent.ACTION_PICK);

  intent.setType("image/*");

  startActivityForResult(intent, 0);

 }

 

 @Override

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  if (data != null) {

   // 得到图片的全路径

   Uri uri = data.getData();

   // 通过路径加载图片

   // this.iv_image.setImageURI(uri);

   try {

    InputStream is = getContentResolver().openInputStream(uri);

    Bitmap bitmap = BitmapFactory.decodeStream(is);

    this.iv_image.setImageBitmap(bitmap);

   } catch (FileNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

 

   // 获取图片的缩略图,可能为空!

   // Bitmap bitmap = data.getParcelableExtra("data");

   // this.iv_image.setImageBitmap(bitmap);

 

  }

  super.onActivityResult(requestCode, resultCode, data);

 }

}

 

 

posted on 2013-03-10 18:50  Freedom000  阅读(204)  评论(0编辑  收藏  举报

导航