【问题标题】:Android Camera to open and then open the captured image in a new activityAndroid Camera 打开然后在新活动中打开捕获的图像
【发布时间】:2012-09-18 10:01:09
【问题描述】:
我想制作一个应用程序,当我按下某个按钮时,我想打开摄像头然后捕捉图像,然后在捕捉它之后。
我想在一个新的activity中打开这个图片,把这个图片放到这个新的activity中,除了两个按钮,一个是删除,另一个是保存到平板的某个目录中。
我用代码打开摄像头:
Open_CAM.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
我不知道在那之后我能做什么?
请帮忙...
【问题讨论】:
标签:
java
android
eclipse
android-camera
【解决方案1】:
Open_CAM.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent photoPickerIntent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempFile());
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
photoPickerIntent.putExtra("return-data", true);
startActivityForResult(photoPickerIntent,TAKE_PICTURE);}}
private Uri getTempFile()
{
File root = new File(Environment.getExternalStorageDirectory(), "ServiceMySigns");
if (!root.exists())
{
root.mkdirs();
}
final Calendar c = Calendar.getInstance();
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH);
int d = c.get(Calendar.DAY_OF_MONTH);
int h = c.get(Calendar.HOUR_OF_DAY);
int mi = c.get(Calendar.MINUTE);
//String filename=""+y+"-"+"-"+(m+1)+"-"+d+" "+h+":"+mi;
String filename=""+System.currentTimeMillis();
File file = new File(root,filename+".jpeg" );
muri = Uri.fromFile(file);
selectedImagePath=muri.getPath();
Log.v("take picture path",selectedImagePath);
return muri;
}
public void onActivityResult(int requestcode,int resultcode ,Intent data)
{
switch(requestcode)
{
case TAKE_PICTURE:
if(resultcode==RESULT_OK)
{
BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize=8;
Bitmap newImage = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(selectedImagePath,o),
150,
150,
false);}}}
在 onActivityResult 中获得位图后,您可以通过 Intent 将该位图发送到另一个活动。
【解决方案2】:
下面的代码将帮助您从相机拍照并将图像设置到下一个活动
private void takePicture() {
cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, IMAGE_CAPTURE);
}
// Receive the result from the start Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("onActivityResult", "we r in onActivityResult");
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case IMAGE_CAPTURE:
File dir = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File output = new File(dir, "camerascript.png");
cPath = output.getAbsolutePath();
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(output));
Intent capIntent = new Intent(yourcurrentActivity.this,
yournextActivity.class);
capIntent.putExtra("gallery", cPath);
startActivity(capIntent);
break;
default:
break;
}
}
}
然后将 intnet 额外数据输入到您想要设置捕获图像的yournextAactivity。
ImageView imageView = (ImageView)findViewById(R.id.imgView);
String fileString = getIntent().getStringExtra("gallery");
imageView.setImageBitmap(BitmapFactory.decodeFile(fileString));