¿Cómo se toman imágenes de alta resolución usando Camera.takePicture ()?

Estoy implementando una cámara en la aplicación y cada vez que tomo una foto mi imagen es 320×240, aunque la cámara de mi teléfono es capaz de resoluciones mucho más altas (Galaxy Nexus). No pude encontrar un parámetro para configurar la resolución, así que ¿cómo puedo subir la resolución de las imágenes que estoy tomando? Aquí está el código relevante:

@Override public void surfaceCreated( SurfaceHolder holder ) { setSurfaceHolder( holder ); } @Override public void surfaceDestroyed( SurfaceHolder holder ) { setSurfaceHolder( null ); } private void attachCameraToSurface( Camera camera, SurfaceHolder holder ) { try { camera.setPreviewDisplay( holder ); setInPreview( true ); } catch (IOException e) { Log.e( "CameraFragment", "Exception in attachCameraToSurface()", e ); } } @Override public void surfaceChanged( SurfaceHolder holder, int format, int width, int height ) { Camera camera = getCamera(); if ( camera == null ) { return; } Camera.Size size = getCameraPreviewSize( camera ); Camera.Parameters params = camera.getParameters(); params.setPreviewSize( size.width, size.height ); camera.setParameters( params ); attachCameraToSurface( camera, holder ); startPreview(); } private Camera.Size getCameraPreviewSize( Camera camera ) { Camera.Parameters params = camera.getParameters(); List<Camera.Size> supportedSizes = params.getSupportedPreviewSizes(); Rect frame = getSurfaceHolder().getSurfaceFrame(); int width = frame.width(); int height = frame.height(); for (Camera.Size size : supportedSizes) { if ( size.width >= width || size.height >= height ) { return size; } } return supportedSizes.get( 0 ); } @Override public void onClick( View v ) { switch (v.getId()) { case R.id.camera_action_ImageView: getCamera().takePicture( getShutterCallback(), null, new JpegPictureCallback() ); break; } } private class JpegPictureCallback implements PictureCallback { @Override public void onPictureTaken( byte[] data, Camera camera ) { Bitmap bitmap = null; try { bitmap = BitmapFactory.decodeByteArray( data, 0, data.length ); } catch (OutOfMemoryError e) { Log.e( "CameraFragment", "Out of memory decoding image from camera.", e ); return; } data = null; if ( bitmap != null ) { new SavePictureWorker( getActivity() ).execute( bitmap ); } startPreview(); } } 

5 Solutions collect form web for “¿Cómo se toman imágenes de alta resolución usando Camera.takePicture ()?”

Utilice params.setPictureSize() . Consulte Camera.Parameters para obtener más información.

Asegúrese de que llama a params.getSupportedPictureSizes() primero para obtener una matriz de tamaños de imagen compatibles. A continuación, elija un tamaño de la lista y utilice el método setPictureSize() para establecer el tamaño deseado.

 Camera.Parameters params = camera.getParameters(); List<Camera.Size> supportedSizes = params.getSupportedPictureSizes(); . . Camera.Size sizePicture = (one of the sizes from supportedSizes list); . params.setPictureSize(sizePicture.width, sizePicture.height); 
 Camera.Parameters param; param = camera.getParameters(); Camera.Size bestSize = null; List<Camera.Size> sizeList = camera.getParameters().getSupportedPreviewSizes(); bestSize = sizeList.get(0); for(int i = 1; i < sizeList.size(); i++){ if((sizeList.get(i).width * sizeList.get(i).height) > (bestSize.width * bestSize.height)){ bestSize = sizeList.get(i); } } List<Integer> supportedPreviewFormats = param.getSupportedPreviewFormats(); Iterator<Integer> supportedPreviewFormatsIterator = supportedPreviewFormats.iterator(); while(supportedPreviewFormatsIterator.hasNext()){ Integer previewFormat =supportedPreviewFormatsIterator.next(); if (previewFormat == ImageFormat.YV12) { param.setPreviewFormat(previewFormat); } } param.setPreviewSize(bestSize.width, bestSize.height); param.setPictureSize(bestSize.width, bestSize.height); camera.setParameters(param); camera.takePicture(shutterCallback, rawCallback, jpegCallback); 

Asegúrese de llamar a camera.getSupportedPictureSizes () primero para obtener una matriz de tamaños de imagen compatibles.

En realidad es params.getSupportedPictureSizes();

Creo, Usted puede usar setPictureSize (int width, int height) . Se utiliza para ajustar las dimensiones de la imagen en píxeles.

 Camera.Parameters parameters = camera.getParameters(); List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); int w = 0, h = 0; for (Camera.Size size : sizes) { if (size.width > w || size.height > h) { w = size.width; h = size.height; } } parameters.setPictureSize(w, h); 
  • Asegúrese de que las fotos se guardan con la misma orientación que se tomaron?
  • ¿Está com.android.camera.action.CROP no disponible para Android jelly bean 4.3?
  • Cómo encender la linterna Android
  • Nexus 5 (4.4.2) El LED de la linterna no se enciende
  • Apertura de la cámara en un proceso diferente
  • Cómo obtener la distancia a un objeto y el tamaño del objeto utilizando la cámara (dispositivo Android)?
  • Hacer una aplicación de cámara con Android utilizando la API de cámara que funcionará en todos los dispositivos
  • Androide imagen de la cámara uri de regreso con una falla de resultados ResultInfo
  • Android: Cancelar la cancelación del botón de la cámara
  • Algunos tamaños de imagen que causan la falla de Camera.takePicture ()
  • ¿Cómo funciona un obturador remoto para trabajar con la cámara en Android / iOS?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.