簡體   English   中英

如何存儲使用camera.takePicture(null,null,mPicture)捕獲的圖像,以便可以在下一個活動中顯示它?

[英]How to store image captured using camera.takePicture(null,null,mPicture) so that it can be displayed it in next activity?

我在android中制作自定義camera應用程序。 我使用捕獲image

camera.takePicture(null,null,mPicture)" and "Camera.PictureCallBack()

我想存儲從camera拍攝的image ,以便我可以在下一個activity顯示它。 如何做呢?

    Camera.PictureCallback mPicture = new Camera.PictureCallback() {

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        File pictureFile = getOutputMediaFile();
        if (pictureFile == null) {
            return;
        }
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);

            fos.close();
        } catch (FileNotFoundException e) {

        } catch (IOException e) {
        }
    }
};



private static File getOutputMediaFile() {
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            "MyCameraApp");
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }
    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
            .format(new Date());
    File mediaFile;
    mediaFile = new File(mediaStorageDir.getPath() + File.separator
            + "IMG_" + timeStamp + ".jpg");

    return mediaFile;
}

將uri傳遞給您下一個活動意圖的額外內容

public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == SELECT_PICTURE_USING_CAMERA) {
            try {
               Intent i = new Intent(FirstActivity.this, SecondActivity.class);
               i.putExtra("uri",outputFileUri);
               startActivity(i);
            } catch (Exception ex) {
                Log.e("Exception", ex.toString());
            }
        }
    }
}

然后在第二個活動中檢索圖像

Uri = getIntent().getExtras("uri");

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;

final Bitmap capturedimage = BitmapFactory.decodeFile(uri, options);
imgPreview.setImageBitmap(capturedimage );

打開相機

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, SELECT_PICTURE_USING_CAMERA);

然后需要實現onActivityResult來獲取數據。

public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == SELECT_PICTURE_USING_CAMERA) {
            try {
               final File file = new File(outputFileUri.getPath());
            } catch (Exception ex) {
                Log.e("Exception", ex.toString());
            }
        }
    }
}

然后,您可以從file路徑中獲取圖像以在下一個活動中顯示。

您可以使用CameraView以非常簡單的方式實現自定義相機,從而為您提供捕獲圖像和視頻的功能。 您可以看到CameraActivity拍攝照片的DEMOPicturePreviewActivityVideoPreviewActivity用於預覽CameraActivity拍攝的照片和視頻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM