2012-02-01 2 views
1

Может ли кто-нибудь предоставить мне пример кода о захвате «полного» изображения с камеры, а затем преобразовать его в «startActivityForResult» в виде байта, а также как растровое изображение для отображения в imageView. Любая помощь будет по-настоящему оценена.Android - камера

Сэм

ответ

2

Возможно, вы видели это, но. Здесь есть отличный учебник.

http://developer.android.com/reference/android/hardware/Camera.html

Для Bitmaps http://developer.android.com/reference/android/graphics/BitmapFactory.html

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

2

Это немного сложное дело с камерой. Вот фрагмент кода, который я написал для приложения.

private final int RECEIVE_CAMERA_PICTURE = 10; 
private Uri mCameraUri = null; 

mCameraUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues()); 
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCameraUri); 
mtimeCameraAcessed = System.currentTimeMillis(); 
startActivityForResult(cameraIntent, RECEIVE_CAMERA_PICTURE); 

Теперь, чтобы обработать захват изображения, в методе onActivityResult() необходимо поместить следующее. Вы заметите, что я установил чек, чтобы получить ориентацию захваченного изображения. Это значение будет полезно при выводе изображения через ImageView в другой деятельности:

int orientation = -10; 

Intent displayCameraPictureIntent = new Intent(MainActivity.this, FilterActivity.class); 
displayCameraPictureIntent.setData(mCameraUri); 

String filePath = OtherUtils.getRealPathFromURI(mContext, mCameraUri); 
long fileSize = new File(filePath).length(); 

Cursor mediaCursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] {MediaStore.Images.ImageColumns.ORIENTATION, MediaStore.MediaColumns.SIZE }, MediaStore.MediaColumns.DATE_ADDED + ">=?", new String[]{String.valueOf(mtimeCameraAcessed/1000 - 1)}, MediaStore.MediaColumns.DATE_ADDED + " desc"); 

//ensure that the app doesn't consume inappropriate data 
if (mediaCursor != null && mtimeCameraAcessed != 0 && mediaCursor.getCount() != 0) { 
    while(mediaCursor.moveToNext()){ 
     long size = mediaCursor.getLong(1); 
     //Extra check to make sure that we are getting the orientation from the proper file 
     if(size == fileSize){ 
       orientation = mediaCursor.getInt(0); 
       break; 
     } 
    } 
} 


displayCameraPictureIntent.putExtra("orientationValue", orientation); 
startActivity(displayCameraPictureIntent); 

Теперь, чтобы отобразить изображение, в новой деятельности:

private Bitmap imageBitmap = null; 

Uri imageUri = getIntent().getData(); 
shareImageUri = imageUri; 
try { 
imageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 
} catch (Exception e) { 
// TODO Auto-generated catch block   
} 

// check whether image is in landscape or portrait mode 
if(getIntent().getIntExtra("orientationValue", 1) == 90) { 
    //image is in portrait. So, rotate the image by 90degrees so that it is displayed in portrait mode 
} 

//now, set the bitmap to the appropriate imageView. You might want to scale the bitmap, to avoid 
//memory issues. 

Вы также хотите, чтобы проверить это ссылка, которая объясняет ориентационный аспект этой части кода: Images taken with ACTION_IMAGE_CAPTURE always returns 1 for ExifInterface.TAG_ORIENTATION on some newer devices

Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы или проблемы. Если вместо этого вы хотите использовать Camera api, я предупреждаю вас, что это сложная сложная задача, но определенно правдоподобная.