带相机意图的照片,并在imageView或textView中显示?

我有一个关于如何使用相机意图(或相机API)拍摄图像的问题,然后将图像放入一个imageView中,以便在我的应用程序中显示。 这是我迄今为止。

我设置了一个button

Button btnPicture = (Button) findViewById(R.id.btn_picture); btnPicture.setOnClickListener(this); 

我设置了一个Camera方法

 private void Camera() { Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, TAKE_PICTURE_CODE); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent, REQUEST_CODE); } 

而这就是我迷失的地方。 我正在处理我拍摄的图像。

  private void processImage(Intent intent) { setContentView(R.layout.imagelayout); ImageView imageView = (ImageView)findViewById(R.id.image_view); cameraBitmap = (Bitmap)intent.getExtras().get("data"); imageView.setImageBitmap(cameraBitmap); } 

我的意图是显示您在image_view中采取的图像。 我没有收到错误,没有任何反应。 当我拍照时,我被要求拍摄另一张照片,或者在我使用设备后退button后,应用程序closures。 看来我完全被我的应用程序拿走了,返回是个大问题。 有什么build议么? 我错过了什么?

哦,这是我的onActivityResult

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(TAKE_PICTURE_CODE == requestCode) { Bundle extras = data.getExtras(); if (extras.containsKey("data")) { Bitmap bmp = (Bitmap) extras.get("data"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] image = baos.toByteArray(); if (image != null) { Log.d(TAG, "image != null"); } } else { Toast.makeText(getBaseContext(), "Fail to capture image", Toast.LENGTH_LONG).show(); } } } 

我试图把图像放在getExtras中,然后将其存储到ByteArray中。 是我想要做的另一件事。 不知道如何一起来。

Solutions Collecting From Web of "带相机意图的照片,并在imageView或textView中显示?"

我发现很容易和有用的方法是这样的:

主要活动

 private static String root = null; private static String imageFolderPath = null; private String imageName = null; private static Uri fileUri = null; private static final int CAMERA_IMAGE_REQUEST=1; public void captureImage(View view) { ImageView imageView = (ImageView) findViewById(R.id.capturedImageview); // fetching the root directory root = Environment.getExternalStorageDirectory().toString() + "/Your_Folder"; // Creating folders for Image imageFolderPath = root + "/saved_images"; File imagesFolder = new File(imageFolderPath); imagesFolder.mkdirs(); // Generating file name imageName = "test.png"; // Creating image here File image = new File(imageFolderPath, imageName); fileUri = Uri.fromFile(image); imageView.setTag(imageFolderPath + File.separator + imageName); Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); startActivityForResult(takePictureIntent, CAMERA_IMAGE_REQUEST); } 

然后在你的活动onActivityResult方法中:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case CAMERA_IMAGE_REQUEST: Bitmap bitmap = null; try { GetImageThumbnail getImageThumbnail = new GetImageThumbnail(); bitmap = getImageThumbnail.getThumbnail(fileUri, this); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // Setting image image icon on the imageview ImageView imageView = (ImageView) this .findViewById(R.id.capturedImageview); imageView.setImageBitmap(bitmap); break; default: Toast.makeText(this, "Something went wrong...", Toast.LENGTH_SHORT).show(); break; } } } 

GetImageThumbnail.java

 public class GetImageThumbnail { private static int getPowerOfTwoForSampleRatio(double ratio) { int k = Integer.highestOneBit((int) Math.floor(ratio)); if (k == 0) return 1; else return k; } public Bitmap getThumbnail(Uri uri, Context context) throws FileNotFoundException, IOException { InputStream input = context.getContentResolver().openInputStream(uri); BitmapFactory.Options onlyBoundsOptions = new BitmapFactory.Options(); onlyBoundsOptions.inJustDecodeBounds = true; onlyBoundsOptions.inDither = true;// optional onlyBoundsOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;// optional BitmapFactory.decodeStream(input, null, onlyBoundsOptions); input.close(); if ((onlyBoundsOptions.outWidth == -1) || (onlyBoundsOptions.outHeight == -1)) return null; int originalSize = (onlyBoundsOptions.outHeight > onlyBoundsOptions.outWidth) ? onlyBoundsOptions.outHeight : onlyBoundsOptions.outWidth; double ratio = (originalSize > 400) ? (originalSize / 350) : 1.0; BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); bitmapOptions.inSampleSize = getPowerOfTwoForSampleRatio(ratio); bitmapOptions.inDither = true;// optional bitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;// optional input = context.getContentResolver().openInputStream(uri); Bitmap bitmap = BitmapFactory.decodeStream(input, null, bitmapOptions); input.close(); return bitmap; } } 

然后在ImageView的onclick方法将会是这样的:

 public void showFullImage(View view) { String path = (String) view.getTag(); if (path != null) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri imgUri = Uri.parse("file://" + path); intent.setDataAndType(imgUri, "image/*"); startActivity(intent); } } 

要正确拍摄照片,应将其存储在临时文件中,因为结果意图中的数据可以为空:

 final Intent pickIntent = new Intent(); pickIntent.setType("image/*"); pickIntent.setAction(Intent.ACTION_GET_CONTENT); final String pickTitle = activity.getString(R.string.choose_image); final Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle); if (AvailabilityUtils.isExternalStorageReady()) { final Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); final Uri fileUri = getCameraTempFileUri(activity, true); takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { takePhotoIntent }); } activity.startActivityForResult(chooserIntent, REQUEST_CODE); 

然后从Uri得到照片:

 if (requestCode == ProfileDataView.REQUEST_CODE && resultCode == Activity.RESULT_OK) { final Uri dataUri = data == null ? getCameraTempFileUri(context, false) : data.getData(); final ParcelFileDescriptor pfd = context.getContentResolver() .openFileDescriptor(imageUri, "r"); final FileDescriptor fd = pfd.getFileDescriptor(); final Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd); }