这里写代码片
从相机中拍照设置头像,并且现在crop为正方形
package com.example.administrator.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* Created by shj on 2016/3/7 0007.
*/
public class PhotoActivity extends Activity {
//拍照
private static final int TACK_PHOTO = 0;
//剪裁
private static final int CROP_PHOTO = 1;
private Uri imgUri;
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photo);
iv = (ImageView) findViewById(R.id.iv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
File imgFile = new File(Environment.getExternalStorageDirectory(), "select.jpg");
if (imgFile.exists()) {
imgFile.delete();
}
try {
imgFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imgUri = Uri.fromFile(imgFile);
Intent imgIntent = new Intent("android.media.action.IMAGE_CAPTURE");
imgIntent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
startActivityForResult(imgIntent, TACK_PHOTO);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TACK_PHOTO:
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imgUri, "image/*");
intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面.
intent.putExtra("aspectX", 1);// 这两项为裁剪框的比例.
intent.putExtra("aspectY", 1);// x:y=1:1
intent.putExtra("outputX", 200);//图片输出大小
intent.putExtra("outputY", 200);
intent.putExtra("output", imgUri);
intent.putExtra("outputFormat", "JPEG");// 返回格式
startActivityForResult(intent, CROP_PHOTO);
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK) {
Toast.makeText(PhotoActivity.this, "code", Toast.LENGTH_SHORT).show();
try {
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imgUri));
Bitmap b = toRoundCorner(bitmap, 2);
iv.setImageBitmap(b);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
}
}
//将图片变成圆形
public static Bitmap toRoundCorner(Bitmap bitmap, float ratio) {
System.out.println("图片是否变成圆形模式了+++++++++++++");
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
canvas.drawRoundRect(rectF, bitmap.getWidth() / ratio,
bitmap.getHeight() / ratio, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
System.out.println("pixels+++++++" + String.valueOf(ratio));
return output;
}
}