Почему я не могу взять изображение с камеры, но могу получить изображение из галереи в Android? - PullRequest
0 голосов
/ 03 декабря 2011

Я использую этот код для получения изображения из галереи:

fromGalleryButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    canvasPictureDialog.dismiss();
                    Intent intent = new Intent(); 
                    intent.setType("image/*"); 
                    intent.setAction(Intent.ACTION_GET_CONTENT);// 
                    //startActivity(intent);
                    startActivityForResult(Intent.createChooser(intent, "Select Picture"),10);
                    //finish();
                }
            });

И чтобы взять изображение с камеры, я использую этот код:

private static final int TAKE_PHOTO_CODE = 1;  
private void takePhoto(){   
    final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);   
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this)) );    
    startActivityForResult(intent, TAKE_PHOTO_CODE); 
}

private File getTempFile(Context context){   
    //it will return /sdcard/image.tmp   
    //final File path = new File( Environment.getExternalStorageDirectory(), context.getPackageName() );
    final File path = new File( Environment.getExternalStorageDirectory(), context.getPackageName());

    if(!path.exists()){     
        path.mkdir();   
    }   
    return new File(path, "image.tmp"); 
}

И общий код для onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {     
    super.onActivityResult(requestCode, resultCode, data);     
    if (requestCode == 10 && resultCode == Activity.RESULT_OK) {             
        Uri contentUri = data.getData();          
        String[] proj = { MediaStore.Images.Media.DATA };         
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);         
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);         
        cursor.moveToFirst();         
        imagePath = cursor.getString(column_index);           
        //Bitmap croppedImage = BitmapFactory.decodeFile(imagePath);
        tempBitmap = BitmapFactory.decodeFile(imagePath);
        photoBitmap = Bitmap.createScaledBitmap(tempBitmap, display.getWidth(), display.getHeight(), true);
    } 
    if(resultCode == RESULT_OK && requestCode==TAKE_PHOTO_CODE){
         final File file = getTempFile(this);         
         try {           

             tempBitmap = Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
             photoBitmap = Bitmap.createScaledBitmap(tempBitmap, display.getWidth(), display.getHeight(), true);
             // do whatever you want with the bitmap (Resize, Rename, Add To Gallery, etc)         
        } catch (FileNotFoundException e) {           
            e.printStackTrace();         
        } catch (IOException e) {           
            e.printStackTrace();         
        } 

    }

}

Теперь с помощью этого кода я рисую изображение на холсте:

 if(!(imagePath==null))
    {
        //tempBitmap = BitmapFactory.decodeFile(imagePath);
        //photoBitmap = Bitmap.createScaledBitmap(tempBitmap, display.getWidth(), display.getHeight(), true);
        canvas.drawBitmap (photoBitmap,0,  0, null);
    }

Но с этим использованием я могу получить изображение из галереи, но не с камеры. Зачем ?? Что не так в моем коде ?? Спасибо.

1 Ответ

0 голосов
/ 05 декабря 2011

Ну, я решил эту проблему по-своему. Здесь есть логическая ошибка. Я взял условие if для переменной imagePath, которая не может работать для получения изображения с камеры. Я взял одну булеву переменную и установил ее для получения изображения с камеры, и она работает для меня. В любом случае, спасибо за комментарии и помощь. Спасибо.

...