Android 调用系统的照相,浏览图片,转存并裁剪!

public class AddCardActivity extends Activity {


private  Button add;

private  Button take_p;

private Button app_ol;

private File sdCard;

private File sdPhoto;

   private AlphaAnimation anim_alpha; 

     private int menu = -1;

     private final int LOCAL = 0;

     private final int TAKE = 1;

     private final int APP = 2;

    

     public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

       //全屏显示

            ActivityUtil.noNotificationBar(this);

            ActivityUtil.noTitleBar(this);


    setContentView(R.layout.addcard);

         //转存出的路径

            sdPhoto = new File("/sdcard/card_xx/photo_xx");

         if(!sdPhoto.exists()){

         sdPhoto.mkdirs();

        }

//转存出的文件

        sdCard = new File("/sdcard/card_xx/aa.png");

        

        add = (Button)findViewById(R.id.add);

        take_p = (Button)findViewById(R.id.take_p);

        app_ol = (Button)findViewById(R.id.app_ol);

        

        /* 事件处理 */

        setListener();

        

        anim_alpha = new AlphaAnimation(0.5f, 0.5f);

anim_alpha.setDuration(80);

anim_alpha.setRepeatCount(1);

anim_alpha.setAnimationListener(new AnimationListener() {

public void onAnimationStart(Animation animation) {

}

public void onAnimationRepeat(Animation animation) {

}

public void onAnimationEnd(Animation animation) {

switch (menu) {

case LOCAL:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 

intent.setType("image/*");

startActivityForResult(intent, 1);

break;

case TAKE:

   intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

   File out = new File(Environment.getExternalStorageDirectory(),"camera.png");

   Uri uri = Uri.fromFile(out);

   intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);


   startActivityForResult(intent, 3); 

break;

case APP:

intent = new Intent();

intent.setClass(AddCardActivity.this, TemplateListActivity.class);

startActivityForResult(intent, 9);

break;

}

}

});

    }

    

    private void setListener()

    {

     /* 本地导入按钮事件处理 */

        add.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

menu = LOCAL;

add.setAnimation(anim_alpha);

         anim_alpha.startNow();

         add.invalidate();

}

});

        

        /* 拍照 按钮事件处理 */

        take_p.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

menu = TAKE;

take_p.setAnimation(anim_alpha);

         anim_alpha.startNow();

         take_p.invalidate();

} 

});

        

        /* 在线申请事件处理 */

        app_ol.setOnClickListener(new OnClickListener()

        {

         public void onClick(View v)

         {

         menu = APP;

         app_ol.setAnimation(anim_alpha);

         anim_alpha.startNow();

         app_ol.invalidate();

         }

        }

        );

        

    }

        /* 返回值处理 */

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

    if (resultCode == RESULT_OK){

    switch (requestCode) {

    /* 裁剪功能 ,裁剪后跳到2保存*/

case 1:

Intent cj = new Intent("com.android.camera.action.CROP");

cj.setData( data.getData());

cj.putExtra("crop", "true");

cj.putExtra("aspectX", 3);  

cj.putExtra("aspectY", 2);   

cj.putExtra("outputX",384 );

cj.putExtra("outputY", 256);

cj.putExtra("noFaceDetection", true);  

cj.putExtra("return-data", true); 

startActivityForResult(Intent.createChooser(cj, "裁剪") , 2);

break;

/* 保存并跳转 */

case 2:

Intent intent = new Intent();

Bundle extras = data.getExtras();

if(extras != null ) {  

   Bitmap photo = extras.getParcelable("data");  

   try {

FileOutputStream outStreamz = new FileOutputStream(sdCard);

photo.compress(Bitmap.CompressFormat.PNG, 50, outStreamz);

outStreamz.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

catch (IOException e) {

e.printStackTrace();

}

   intent.setClass(AddCardActivity.this,ChooseABActivity.class);

startActivity(intent);

finish();

}

break;

/* 拍照后保存图片,并跳到裁剪功能  */

case 3:

Intent cj1 = new Intent("com.android.camera.action.CROP");

try {

cj1.setData(Uri.parse(android.provider.MediaStore.Images.Media.

insertImage(getContentResolver(),"/sdcard/camera.png", null, null)));

} catch (FileNotFoundException e) {

e.printStackTrace();

}                

cj1.putExtra("crop", "true");

cj1.putExtra("aspectX", 3);  

cj1.putExtra("aspectY", 2);   

cj1.putExtra("outputX",384 );

cj1.putExtra("outputY", 256);

cj1.putExtra("return-data", true); 

startActivityForResult(cj1, 2);

File camera = new File("/sdcard/camera.png");

if(camera.exists())

 camera.delete();

break;

}

    }

     

    if (requestCode == 9) {

    Intent i=new Intent(this,MainMenuActivity.class);

    startActivity(i);

    finish();

    }

   }

    

    @Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

     

    if(keyCode==KeyEvent.KEYCODE_BACK)

    {

    Intent i=new Intent(this,MainMenuActivity.class);

    startActivity(i);

    finish();

    }

return super.onKeyDown(keyCode, event);

} 

    

}

/**************************************************************************************************************************************************/

如果照相之后要添加裁剪:

 class TakePicture implements OnClickListener{

  public void onClick(View v) {
   takePic(); 

   File picture = new File("/sdcard/picture.jpg");
   Intent intent = new Intent("com.android.camera.action.CROP");     

/**************如果不加这句话,会报错,找不到裁剪的Activity******/
 intent.setDataAndType( Uri.fromFile(file),"image/*);

/********************************************************************************/

   intent.putExtra("crop", "true");
   intent.putExtra("aspectX", 3); 
   intent.putExtra("aspectY", 2);  
   intent.putExtra("outputX",384 );
   intent.putExtra("outputY", 256); 
   intent.putExtra("return-data", true);
   startActivityForResult(intent, OVER);
   finish();
  }
  }

/***********************************************************************************************************************************************/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android中,要调用系统相机和相册并裁剪图片,需要使用一些系统提供的Intent和API。下面是一个示例的源码,实现了这个功能。 首先,在AndroidManifest.xml文件中添加如下权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 然后,在你的Activity中添加如下代码: ```java private static final int REQUEST_IMAGE_CAPTURE = 1; // 调用相机的请求码 private static final int REQUEST_IMAGE_PICK = 2; // 调用相册的请求码 private static final int REQUEST_IMAGE_CROP = 3; // 调用裁剪的请求码 private Uri imageUri; // 保存相机拍照或相册选择的照片Uri // 调用系统相机拍照 private void takePicture() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (intent.resolveActivity(getPackageManager()) != null) { // 创建临时文件保存拍照图片 File imageFile = createImageFile(); if (imageFile != null) { imageUri = FileProvider.getUriForFile(this, "com.example.fileprovider", imageFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } } } // 调用系统相册选择照片 private void pickPicture() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setType("image/*"); startActivityForResult(Intent.createChooser(intent, "选择图片"), REQUEST_IMAGE_PICK); } // 创建临时文件保存拍照图片 private File createImageFile() { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); String imageFileName = "IMG_" + timeStamp; File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); try { File imageFile = File.createTempFile(imageFileName, ".jpg", storageDir); return imageFile; } catch (IOException e) { e.printStackTrace(); } return null; } // 调用系统裁剪图片 private void cropPicture(Uri sourceUri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(sourceUri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 500); intent.putExtra("outputY", 500); intent.putExtra("return-data", true); startActivityForResult(intent, REQUEST_IMAGE_CROP); } // 处理相机和相册返回的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case REQUEST_IMAGE_CAPTURE: cropPicture(imageUri); // 拍照裁剪图片 break; case REQUEST_IMAGE_PICK: cropPicture(data.getData()); // 选择照片后裁剪图片 break; case REQUEST_IMAGE_CROP: Bundle extras = data.getExtras(); if (extras != null) { Bitmap bitmap = extras.getParcelable("data"); // 在这里处理裁剪后的图片 } break; } } } ``` 以上就是调用系统相机和相册并裁剪图片的简单示例代码。你可以根据自己的需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值