上一次写项目时,需要上传头像,要求是无论是从相册还会相机拍照都可以,然后需要裁减。我在这里是直接调用系统的裁减功能
(1)下面是我写的activity,注释很详细啦,这里就不一一介绍啦
public class MainActivity extends Activity {
public static final int NONE = 0;
public static final int PHOTOHRAPH = 1;// 拍照
public static final int PHOTOZOOM = 2; // 缩放
public static final int PHOTORESOULT = 3;// 结果
public static final String IMAGE_UNSPECIFIED = "image/*";
ImageView imgHead;
Button btnAlbum;// 相册按钮
Button btnCamera;// 拍照按钮
private String ImageName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgHead = (ImageView) findViewById(R.id.imageID);// 要显示的图片
btnAlbum = (Button) findViewById(R.id.btn_album);// 相册按钮
btnCamera = (Button) findViewById(R.id.btn_camera);// 拍照按钮
btnAlbum.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 调用系统的相册
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
IMAGE_UNSPECIFIED);
// 调用剪切功能
startActivityForResult(intent, PHOTOZOOM);
}
});
btnCamera.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ImageName = "/" + getStringToday() + ".jpg";
// 调用系统的拍照功能
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(), ImageName)));
startActivityForResult(intent, PHOTOHRAPH);
}
});
}
/**
* 格式化当前时间
*
* @return
*/
public static String getStringToday() {
Date currentTime = new Date();// 获得当前时间
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");// 格式化的方式
String dateString = formatter.format(currentTime);// 格式化当前时间
return dateString;
}
// 调用startActivityResult,返回之后的回调函数
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (resultCode == NONE)
return;
// 拍照
if (requestCode == PHOTOHRAPH) {
// 设置文件保存路径这里放在跟目录下
File picture = new File(
Environment.getExternalStorageDirectory() + ImageName);
startPhotoZoom(Uri.fromFile(picture));
}
if (data == null)
return;
// 读取相册缩放图片
if (requestCode == PHOTOZOOM) {
startPhotoZoom(data.getData());
}
// 处理结果
if (requestCode == PHOTORESOULT) {
Bundle extras = data.getExtras();// 通过返回过来的data,获得Bundle对象
if (extras != null) {
Bitmap photo = extras.getParcelable("data");// 获得bitmap对象
// Bitmap photo
// =BitmapFactory.decodeResource(getResources(),
// R.drawable.ic_launcher);//将图片转化成bitmap对象
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0
// -
// 100)压缩文件
// 0表示压缩比最高,100表示压缩比最小
InputStream isBm = new ByteArrayInputStream(
stream.toByteArray());
// NewService newService=new NewService(); //上传图片类的对象
// newService.UploadHead("http://192.168.8.185/MobileService/UploadHead.ashx",
// isBm);
imgHead.setImageBitmap(photo);// 将拍照或者从相册截取获得的结果放在imageView控件里面
}
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 调用系统的裁剪图片的方法,设置缩放图片的一些参数
*
* @param uri
*/
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 180);
intent.putExtra("outputY", 180);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTORESOULT);
}
}
(2)这是对应的xml,很简单,就有几个控件而已
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/app_name" />
<ImageView
android:id="@+id/imageID"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_album"
android:layout_width="150dip"
android:layout_height="50dip"
android:text="相册" />
<Button
android:id="@+id/btn_camera"
android:layout_width="150dip"
android:layout_height="50dip"
android:text="拍照" />
</LinearLayout>