2016-09-18 3 views
1

Я хочу отобразить захваченную фотографию с камеры на другую активность в режиме просмотра изображения. Но это должно быть полное качество. Пожалуйста, расскажи мне, как это сделать. Это мой код:захватить фотографию с камеры и отобразить ее в режиме просмотра изображения в другом действии

MainActivity.class

private static final int REQUEST_CAMERA = 1888; 
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent,REQUEST_CAMERA); 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
    if (requestCode == REQUEST_CAMERA) 
      { 
       Uri returnUri = data.getData(); 
       try { 
        Bitmap bitmapImage = MediaStore.Images.Media.getBitmap(MainActivity.this.getContentResolver(),returnUri); 
        Intent i = new Intent(this,ShowCameraPhotoActivity.class); 
        i.putExtra("image",bitmapImage); 
        startActivity(i); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 


      } 
      } 

       } 

ShowPhotoCameraActivity.class:

ImageView showPhoto = (Imageview) findViewById(R.id.image); 
    Bitmap bitmap = (Bitmap) this.getIntent().getParcelableExtra("image"); 
    if (showPhoto != null) { 
     showPhoto.setImageBitmap(bitmap); 
    } 

ответ

0

Utils класса.

public static File getOutputMediaFile(int type) { 
    File mediaStorageDir = new File(
      Environment 
        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
      Config.IMAGE_DIRECTORY_NAME); 

    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      Log.d(Config.IMAGE_DIRECTORY_NAME, "Oops! Failed create " 
        + Config.IMAGE_DIRECTORY_NAME + " directory"); 
      return null; 
     } 
    } 

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
      Locale.getDefault()).format(new Date()); 
    File mediaFile; 
    if (type == Config.MEDIA_TYPE_IMAGE) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator 
       + "IMG_" + timeStamp + ".jpg"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 


public static File persistImage(Bitmap bitmap, String name) { 
    File filesDir = AppSingleton.getContext().getFilesDir(); 
    File imageFile = new File(filesDir, name + ".png"); 

    OutputStream os; 
    try { 
     os = new FileOutputStream(imageFile); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, os); 
     os.flush(); 
     os.close(); 
    } catch (Exception e) { 
     Log.e(AppSingleton.getContext().getClass().getSimpleName(), "Error writing bitmap", e); 
    } 
    return imageFile; 
} 



public static Uri getOutputMediaFileUri(int type) { 
    return Uri.fromFile(getOutputMediaFile(type)); 
} 

MainActivity

private static final int PICK_IMAGE_REQUEST = 2; 
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 

    private Uri fileUri; 
    Bitmap bitmap2; 


/** 
* Cature image 
*/ 
private void captureImage() { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    fileUri = Utils.getOutputMediaFileUri(Config.MEDIA_TYPE_IMAGE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      String imagePath = getImagePath(data.getData()); 
      if (imagePath != null) { 
       Intent intent = new Intent(this, PreviewActivity.class); 
       intent.putExtra(IMAGE_PATH, imagePath); 
       startActivity(intent); 
      } 
     } 
    } 
} 

SecondActivity

в OnCreate()

BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inScaled=true; 
Bitmap bitmap = BitmapFactory.decodeFile(getIntent().getStringExtra("IMAGE_PATH"), options); 
imageview.setImageBitmap(bitmap); 
+0

Не удается разрешить символ Singleton !! –

+0

@ G.Al создать одноэлементный класс с контекстом или переместить эти методы в вашу acitivty –

+0

жаль, что не упоминал ранее, но он также дает мне ошибку также на IMAGE_DiRECTORY_NAME и MEDIA_TYPE_IMAGE –

0

вы можете сделать, как это. для открытия камеры.

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 0); 

после получения фотографии вы собираете данные в методе onActivityResult(), как этот способ.

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    String filePath; 
    Bitmap bitmap = null; 
    if (requestCode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) { 

    bitmap = (Bitmap) data.getExtras().get("data"); 

    Intent intent = new Intent(anotherActivity.class) 
    intent.putExtra(Intent.EXTRA_STREAM, Uri.parse ("file://" + filePath)); 
    startActivity(intent); 
} 

, а затем новый вид деятельности.

Intent intent = getIntent(); 
Uri uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM); 
imageView.setImageURI(imgUri); 
+0

Я не получаю bitmap = getPhoto (filePath); ... Он также показывает ошибку ... –

+0

см. Мои отредактированные ан. –

+0

Значение filePath всегда равно нулю! –

0

Ваш ответ не выровнен и вызывает крушение.

Глобальная переменная: private static final int REQUEST_CAMERA = 1888;

Функция для вызова камеры:

 private void camera(){ 
     Intent intent = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) 
        ? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE) 
        : new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent,REQUEST_CAMERA); 
     } 

Другой @Override метод Результат Обработка onActivityResult:

 @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
     if (requestCode == REQUEST_CAMERA) 
     { 
      try { 
       Bitmap bitmapImage = (Bitmap)data.getExtra("data"); 

       Intent i = new Intent(this,ShowCameraPhotoActivity.class); 
       i.putExtra("image",bitmapImage); 
       startActivity(i); 
       } catch (IOException e) { 
       e.printStackTrace(); 
       } 
     } 
     } 
     } 

Необходимо объявить разрешение на Camera в Manifest.xml

<uses-permission android:name="android.permission.CAMERA"/> 
+0

вы можете мне объяснить MediaStore.Images .Media.getBitmap (это, .....) это показывает мне ошибку –

+0

Что говорит ошибка? – W4R10CK

+0

Используйте этот «Bitmap bitmapImage = MediaStore.Images.Media.getBitmap (MainActivity.this.getContentResolver(), returnUri);' – W4R10CK