• 获得和裁剪图片


    take big picture ,select picture from gallery and crop picture.

    1. 照相获得大图片:
    照相时,把图片保存到文件中, 可以得到大图片(分辨率很高的图片), 具体方法:
    Intent intent 	 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    					
    					mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
    									   "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
    
    					intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
    
    					try {
    						intent.putExtra("return-data", true);
    						
    						startActivityForResult(intent, PICK_FROM_CAMERA);
    					} catch (ActivityNotFoundException e) {
    						e.printStackTrace();
    					}

    2. 从图库中选择图片:
    直接从图库取得图片, 具体方式:
                            Intent intent = new Intent();
    					
    	                intent.setType("image/*");
    	                intent.setAction(Intent.ACTION_GET_CONTENT);
    	                
    	                startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE);

    3. 裁剪图片:
    首先是已经取得原始图片,然后是检查系统中是否存在裁剪图片的应用,最后是裁剪完成,具体实现:
    final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>();
        	
        	Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setType("image/*");
            //获得目标应用的个数
            List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0 );
            
            int size = list.size();
            
            if (size == 0) {	        
            	Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();
            	
                return;
            } else {
            	intent.setData(mImageCaptureUri);
                
                intent.putExtra("outputX", 200);
                intent.putExtra("outputY", 200);
                intent.putExtra("aspectX", 1);
                intent.putExtra("aspectY", 2);
                intent.putExtra("scale", true);
                intent.putExtra("return-data", true);
                
            	if (size == 1) {
            		Intent i 		= new Intent(intent);
    	        	ResolveInfo res	= list.get(0);
    	        	
    	        	i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    	        	
    	        	startActivityForResult(i, CROP_FROM_CAMERA);
            	} else {
    		        for (ResolveInfo res : list) {
    		        	final CropOption co = new CropOption();
    		        	
    		        	co.title 	= getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo);
    		        	co.icon		= getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo);
    		        	co.appIntent= new Intent(intent);
    		        	
    		        	co.appIntent.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    		        	
    		            cropOptions.add(co);
    		        }
    	        
    		        CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions);
    		        
    		        AlertDialog.Builder builder = new AlertDialog.Builder(this);
    		        builder.setTitle("Choose Crop App");
    		        builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
    		            public void onClick( DialogInterface dialog, int item ) {
    		                startActivityForResult( cropOptions.get(item).appIntent, CROP_FROM_CAMERA);
    		            }
    		        });
    	        
    		        builder.setOnCancelListener( new DialogInterface.OnCancelListener() {
    		            @Override
    		            public void onCancel( DialogInterface dialog ) {
    		               
    		                if (mImageCaptureUri != null ) {
    		                    getContentResolver().delete(mImageCaptureUri, null, null );
    		                    mImageCaptureUri = null;
    		                }
    		            }
    		        } );
    		        
    		        AlertDialog alert = builder.create();
    		        
    		        alert.show();
            	}
            }

    4. 显示最后的图片:
    从Intent中获取图片,并显示:
     Bundle extras = data.getExtras();
    	
    		        if (extras != null) {	        	
    		            Bitmap photo = extras.getParcelable("data");
    		            
    		            mImageView.setImageBitmap(photo);
    		        }
    	
    		        File f = new File(mImageCaptureUri.getPath());            
    		        
    		        if (f.exists()) f.delete();
    	
    		        break;

    其他的代码:
    简单Adapter:显示用户可以做的操作
    package net.londatiga.android;
    
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import android.content.Context;
    
    import java.util.ArrayList;
    
    /**
     * Adapter for crop option list.
     * 
     * @author Lorensius W. L. T <lorenz@londatiga.net>
     *
     */
    public class CropOptionAdapter extends ArrayAdapter<CropOption> {
    	private ArrayList<CropOption> mOptions;
    	private LayoutInflater mInflater;
    	
    	public CropOptionAdapter(Context context, ArrayList<CropOption> options) {
    		super(context, R.layout.crop_selector, options);
    		
    		mOptions 	= options;
    		
    		mInflater	= LayoutInflater.from(context);
    	}
    	
    	@Override
    	public View getView(int position, View convertView, ViewGroup group) {
    		if (convertView == null)
    			convertView = mInflater.inflate(R.layout.crop_selector, null);
    		
    		CropOption item = mOptions.get(position);
    		
    		if (item != null) {
    			((ImageView) convertView.findViewById(R.id.iv_icon)).setImageDrawable(item.icon);
    			((TextView) convertView.findViewById(R.id.tv_name)).setText(item.title);
    			
    			return convertView;
    		}
    		
    		return null;
    	}
    }

    CropOption.java //记录应用的一些属性

    public class CropOption {
    	public CharSequence title;
    	public Drawable icon;
    	public Intent appIntent;
    }











  • 相关阅读:
    ubuntu搭建GitLab
    inline,inline-block,block元素的区别
    ES6入门学习
    webpack配置
    angular6之路由
    angular6之Http服务
    angular6之http请求拦截器
    Spring Cloud(6.2):搭建OAuth2 Client
    Spring Cloud(6.1):搭建OAuth2 Authorization Server
    keytool命令的使用
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207246.html
Copyright © 2020-2023  润新知