2013-04-03 4 views
4

Следующий код хорошо работает, чтобы получить миниатюру изображения, снятого с камеры. Я хочу получить полное изображение, а не только миниатюру. У меня есть Samsung Galaxy NexusПолучить изображение с камеры в ImageView Android

private static final int CAMERA_PIC_REQUEST = 1111; 

private ImageView mImage; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_camera); 
     mImage = (ImageView) findViewById(R.id.imageView1); 
     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, CAMERA_PIC_REQUEST); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_PIC_REQUEST) { 
      Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
      mImage.setImageBitmap(thumbnail); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 
      try { 
       file.createNewFile(); 
       FileOutputStream fo = new FileOutputStream(file); 
       fo.write(bytes.toByteArray()); 
       fo.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

Изменить ширину и высоту в 'wrap_content' вашего ImageView –

ответ

8

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

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
startActivityForResult(intent, CAPTURE_NEW_PICTURE); 

Тогда в onActivityResult:

File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 
mImage = (ImageView) findViewById(R.id.imageView1); 
mImage.setImageBitmap(decodeSampledBitmapFromFile(file.getAbsolutePath(), 500, 250)); 

Когда decodeSampledBitmapFromFile:

public static Bitmap decodeSampledBitmapFromFile(String path, 
     int reqWidth, int reqHeight) { // BEST QUALITY MATCH 

    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, options); 

    // Calculate inSampleSize 
     // Raw height and width of image 
     final int height = options.outHeight; 
     final int width = options.outWidth; 
     options.inPreferredConfig = Bitmap.Config.RGB_565; 
     int inSampleSize = 1; 

     if (height > reqHeight) { 
      inSampleSize = Math.round((float)height/(float)reqHeight); 
     } 

     int expectedWidth = width/inSampleSize; 

     if (expectedWidth > reqWidth) { 
      //if(Math.round((float)width/(float)reqWidth) > inSampleSize) // If bigger SampSize.. 
      inSampleSize = Math.round((float)width/(float)reqWidth); 
     } 


    options.inSampleSize = inSampleSize; 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 

    return BitmapFactory.decodeFile(path, options); 
    } 

Вы можете играть с номерами (в этом случае 500 и 250), чтобы изменить качество растрового изображения для ImageView.

+0

Большое спасибо, но я сохраняю изображение где-то, что не является очевидным, было бы простым способом сохранить его в галерее изображений? –

+0

Галерея изображений - это еще одна папка на вашем телефоне, содержащая ваши фото. Я не думаю, что это будет иметь значение. что вы подразумеваете под «не очевидным»? –

+0

Не очевидно, что среднему пользователю нелегко найти изображение, так как оно не хранится в папке «Галерея изображений» –

Смежные вопросы