android 上圖片選取器以及圖片尺寸太大情況下處理

來源:互聯網
上載者:User

代碼請見我的資源http://download.csdn.net/detail/samguoyi/4351467


package test.sam.imgpickdemo;import java.io.File;import javax.security.auth.PrivateCredentialPermission;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.hardware.Camera;import android.media.ExifInterface;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.view.View;import android.widget.ImageView;public class PickPictureDemoActivity extends Activity implements View.OnClickListener{private static final int ACTIVITY_PICKLOCAL = 0;private static final int ACTIVITY_PICKCAMERA = 1;private ImageView showImageView = null;private File imgFile = null;    public void onCreate(Bundle savedInstanceState)     {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        findViewById(R.id.main_pickcamera).setOnClickListener(this);        findViewById(R.id.main_picklocal).setOnClickListener(this);        showImageView = (ImageView)findViewById(R.id.main_showimg);    }        public void onClick(View v)     {    switch (v.getId()) {case R.id.main_picklocal:/* * 使用這種intent則調用任何註冊過的圖片瀏覽器,例如es檔案瀏覽器,來選取圖片 */Intent i = new Intent();i.setType("image/*");i.setAction(Intent.ACTION_GET_CONTENT);/* * 使用這種方式只調用系統的圖庫程式來選取圖片 *///Intent i = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(i, ACTIVITY_PICKLOCAL);break;case R.id.main_pickcamera:imgFile = new File(Environment.getExternalStorageDirectory(), "testpick"+System.currentTimeMillis()+".jpg");try {imgFile.createNewFile();} catch (Exception e) {}if(imgFile.exists()){Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgFile));startActivityForResult(intent, ACTIVITY_PICKCAMERA);}break;default:break;}    }            @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    System.out.println("resultCode = "+resultCode);    String photopathString = null;        if(resultCode == RESULT_OK)    {    if(requestCode == ACTIVITY_PICKLOCAL)        {        Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null);        cursor.moveToFirst();        photopathString = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));        Bitmap bitmap = BitmapFactory.decodeFile(photopathString);        showImageView.setImageBitmap(bitmap);        cursor.close();                /*         * 這段代碼可以擷取圖片的方向,以決定圖片是橫向放置還是豎向放置         */        try {ExifInterface exifInterface = new ExifInterface(photopathString);String tag =  exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION);System.out.println("tag = "+tag);} catch (Exception e) {e.printStackTrace();}                /*     * 這段代碼可以將圖片的長寬等資訊decode出來而不需要分配記憶體     */        try {        BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(photopathString, options);        System.out.println("options.outWidth = "+options.outWidth);        System.out.println("options.outHeight = "+options.outHeight);} catch (Exception e) {}                /*         * 使用這段代碼可以縮小取得圖片尺寸options.inSampleSize為幾,則取得的圖片大小為原來的幾分之一         * 注意inSampleSize需要為2的冪次方         */        try {        BitmapFactory.Options options = new BitmapFactory.Options();        options.inSampleSize = 8;        Bitmap bitmap2 =  BitmapFactory.decodeFile(photopathString, options);        System.out.println("bitmap2.getWidth() = "+bitmap2.getWidth());        System.out.println("bitmap2.getHeight() = "+bitmap2.getHeight());} catch (Exception e) {}                }        if(requestCode == ACTIVITY_PICKCAMERA)        {    /*     * 從網路攝影機返回的圖片無法從data.getData()中取得?不知道為啥     */    Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());    System.out.println(bitmap.getWidth());    System.out.println(bitmap.getHeight());showImageView.setImageBitmap(bitmap);        }        }                    }    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.