zoukankan      html  css  js  c++  java
  • Android-ImageView显示选择本地图片或拍照

    最近写项目,遇到了,在此记录一下。Android-ImageView显示选择本地图片或拍照.

    1. import java.io.ByteArrayOutputStream;  
    2. import java.io.InputStream;  
    3. import android.app.Activity;  
    4. import android.app.AlertDialog;  
    5. import android.content.ContentResolver;  
    6. import android.content.DialogInterface;  
    7. import android.content.Intent;  
    8. import android.database.Cursor;  
    9. import android.graphics.Bitmap;  
    10. import android.graphics.BitmapFactory;  
    11. import android.net.Uri;  
    12. import android.os.Bundle;  
    13. import android.provider.MediaStore;  
    14. import android.view.View;  
    15. import android.view.View.OnClickListener;  
    16. import android.widget.ImageView;  
    17.   
    18. public class PicChooserActivity extends Activity {  
    19.     /** Called when the activity is first created. */  
    20.     private ImageView  imageView;  
    21.     private OnClickListener imgViewListener;  
    22.     private Bitmap myBitmap;  
    23.     private byte[] mContent;  
    24.     @Override  
    25.     public void onCreate(Bundle savedInstanceState) {  
    26.         super.onCreate(savedInstanceState);  
    27.         setContentView(R.layout.main);  
    28.         imageView  =(ImageView) findViewById(R.id.ivPic);  
    29.           
    30.         imageView.setOnClickListener(new OnClickListener() {  
    31.               
    32.             @Override  
    33.             public void onClick(View v) {  
    34.                 // TODO Auto-generated method stub   
    35.                 final CharSequence[] items = { "相册""拍照" };  
    36.                   
    37.                 AlertDialog dlg = new AlertDialog.Builder(PicChooserActivity.this).setTitle("选择照片").setItems(items,   
    38.                         new DialogInterface.OnClickListener() {  
    39.                               
    40.                             @Override  
    41.                             public void onClick(DialogInterface dialog, int which) {  
    42.                                 // TODO Auto-generated method stub   
    43.                             //这里item是根据选择的方式,   在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法     
    44.                                 if(which==1){  
    45.                                     Intent getImageByCamera  = new Intent("android.media.action.IMAGE_CAPTURE");  
    46.                                     startActivityForResult(getImageByCamera, 1);  
    47.                                 }else{  
    48.                                     Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);  
    49.                                     getImage.addCategory(Intent.CATEGORY_OPENABLE);  
    50.                                     getImage.setType("image/jpeg");  
    51.                                     startActivityForResult(getImage, 0);  
    52.                                 }  
    53.                                   
    54.                             }  
    55.                         }).create();  
    56.                 dlg.show();  
    57.             }  
    58.         });  
    59.           
    60.     }  
    61.       
    62.       
    63.     @Override  
    64.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    65.         // TODO Auto-generated method stub   
    66.         super.onActivityResult(requestCode, resultCode, data);  
    67.           
    68.         ContentResolver contentResolver  =getContentResolver();  
    69.          /** 
    70.          * 因为两种方式都用到了startActivityForResult方法,这个方法执行完后都会执行onActivityResult方法, 
    71.          * 所以为了区别到底选择了那个方式获取图片要进行判断,这里的requestCode跟startActivityForResult里面第二个参数对应 
    72.          */  
    73.           
    74.         if(requestCode==0){  
    75.               
    76.             //方式一   
    77.             /*try { 
    78.                  //获得图片的uri  
    79.                 Uri orginalUri = data.getData(); 
    80.                   //将图片内容解析成字节数组  
    81.                 mContent = readStream(contentResolver.openInputStream(Uri.parse(orginalUri.toString()))); 
    82.                  //将字节数组转换为ImageView可调用的Bitmap对象  
    83.                 myBitmap  =getPicFromBytes(mContent,null); 
    84.                   ////把得到的图片绑定在控件上显示 
    85.                 imageView.setImageBitmap(myBitmap); 
    86.             } catch (Exception e) { 
    87.                 e.printStackTrace(); 
    88.                 // TODO: handle exception 
    89.             }*/  
    90.               
    91.             //方式二   
    92.             try {  
    93.                 Uri selectedImage = data.getData();  
    94.                 String[] filePathColumn = { MediaStore.Images.Media.DATA };  
    95.   
    96.                 Cursor cursor = getContentResolver().query(selectedImage,  
    97.                         filePathColumn, nullnullnull);  
    98.                 cursor.moveToFirst();  
    99.   
    100.                 int columnIndex = cursor.getColumnIndex(filePathColumn[0]);  
    101.                 String picturePath = cursor.getString(columnIndex);  
    102.                 cursor.close();  
    103.                 imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));  
    104.             } catch (Exception e) {  
    105.                 // TODO: handle exception   
    106.                 e.printStackTrace();  
    107.             }  
    108.               
    109.               
    110.         }else if(requestCode==1){  
    111.             try {  
    112.                 Bundle extras = data.getExtras();  
    113.                 myBitmap = (Bitmap) extras.get("data");  
    114.                 ByteArrayOutputStream baos = new ByteArrayOutputStream();       
    115.                 myBitmap.compress(Bitmap.CompressFormat.JPEG , 100, baos);       
    116.                 mContent=baos.toByteArray();  
    117.             } catch (Exception e) {  
    118.                 e.printStackTrace();  
    119.                 // TODO: handle exception   
    120.             }  
    121.             imageView.setImageBitmap(myBitmap);  
    122.         }  
    123.           
    124.     }  
    125.       
    126.    public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) {   
    127.         if (bytes != null)   
    128.             if (opts != null)   
    129.                 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);   
    130.             else   
    131.                 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);   
    132.         return null;   
    133.     }   
    134.       
    135.       
    136.       
    137.  public static byte[] readStream(InputStream in) throws Exception{  
    138.      byte[] buffer  =new byte[1024];  
    139.      int len  =-1;  
    140.      ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
    141.        
    142.      while((len=in.read(buffer))!=-1){  
    143.          outStream.write(buffer, 0, len);  
    144.      }  
    145.      byte[] data  =outStream.toByteArray();  
    146.      outStream.close();  
    147.      in.close();  
    148.      return data;  
    149.  }  
    150.       
    151. }  
  • 相关阅读:
    发现:在Silverlight for windows embedded 当中用户控件状态的改变的问题
    silverlight for windows embedded 当中资源的使用
    WINCE7自带DEMO_SmallMusic_wmpTitleBar_学习笔记
    silverlight for windows embbed 的键盘处理之一
    siverlight for windows embeddem 当中方便查看错误代码的类
    基于siverlight for windows embedded 项目开发的小工具
    对于OPENGL ES SURFACE的学习
    openg es 之一
    理解相机的相关参数的设置
    ListViewWebpart的开发
  • 原文地址:https://www.cnblogs.com/huoshenmanbu/p/4909067.html
Copyright © 2011-2022 走看看