a.setDataAndType(data.getData(), "image/*"); startActivityForResult(a, CUTTING_REQUESTCODE); case CUTTING_REQUESTCODE: Bitmap bm=data.getParcelableExtra("data"); img.setImageBitmap(bm);
}
}
} @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}
intent.setDataAndType(uri, "image/*");
// 设置裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 320);
intent.putExtra("outputY", 320);
intent.putExtra("return-data", true);
startActivityForResult(intent, RESULT_REQUEST_CODE); }
我的存储路径是通过Uri path = Uri.fromFile(new File(Environment
.getExternalStorageDirectory(),"temp.jpg"));方式获取的,这个路径是设备的内部存储路径呀。
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", false);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, requestCode);
}
这个函数存在问题,裁减时打开图片的uri与保存图片的uri相同,产生冲突,导致裁减完成后图片的大小变成0Byte。
可将相机照片保存在另外的位置,将intent.setDataAndType(uri, "image/*");中的uri换成相机照片倮存的路径即可。
package com.example.getlocalpicdemo;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity { //定义一个requestCode常量
private static final int SELECT_REQUESTCODE=1;
private static final int CUTTING_REQUESTCODE=2;
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn=(Button) findViewById(R.id.selectButton);
img=(ImageView) findViewById(R.id.img);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent,SELECT_REQUESTCODE);
}
});
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK)
{
switch(requestCode){
case SELECT_REQUESTCODE:
Intent a=new Intent();
// 设置裁剪
a.putExtra("crop", "true");
a.setAction("com.android.camera.action.CROP");
a.putExtra("return-data", true);
//设置裁剪图片的比例
a.putExtra("aspectX", 1);
a.putExtra("aspectY", 1);
//设置获得裁剪图片的大小
a.putExtra("outputX", 400);
a.putExtra("outputY", 400);
a.setDataAndType(data.getData(), "image/*");
startActivityForResult(a, CUTTING_REQUESTCODE);
case CUTTING_REQUESTCODE:
Bitmap bm=data.getParcelableExtra("data");
img.setImageBitmap(bm);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}