Aumentar la calidad / claridad / brillo de las fotos tomadas con la cámara android

Tengo una aplicación para Android donde estoy usando la cámara de Android para tomar fotos. Y después de luchar un poco me las arreglé para tener mi imagen donde quiero y cómo quiero.El problema final es la calidad de la imagen.

Cuando mi vista previa comienza todo parece muy claro y genial, pero después de tomar la foto y mostrando el resultado final de la imagen no se ve bien en absoluto.

Aquí está cómo mi método de surfaceChanged() parece – donde estoy fijando algunos parámetros:

 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { Log.e(TAG, "surfaceChanged"); if (mPreviewRunning) { mCamera.stopPreview(); } Camera.Parameters p = mCamera.getParameters(); List<Size> sizes = p.getSupportedPictureSizes(); System.out.println("Lista de parametrii este urmatoarea:"+sizes); Size size = sizes.get(7); p.setPictureSize(size.width,size.height); mCamera.setParameters(p); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mCamera.startPreview(); mPreviewRunning = true; } 

Coudl alguien dice cuál es la manera de aumentar la calidad de mi foto. ¡Gracias!

EDITAR:

En la activity A donde se toma la foto uso un paquete para enviar la imagen a otra activity B donde la SDCARD en el SDCARD Aquí es cómo lo hago:

Activity A :

  Camera.PictureCallback mPictureCallback = new Camera.PictureCallback(){ public void onPictureTaken(byte[] imageData, Camera c) { if (imageData != null) { Intent mIntent = new Intent(); Bundle b = new Bundle(); b.putByteArray("imageData", imageData); Intent i = new Intent(mContext,ImageDisplayActivity.class); i.putExtras(b); startActivity(i); setResult(FOTO_MODE, mIntent); finish(); } } }; 

En activity B :

 Bundle extras = getIntent().getExtras(); BitmapFactory.Options options=new BitmapFactory.Options(); options.inSampleSize = 5; byte[] imageData = extras.getByteArray("imageData"); Bitmap myImage = BitmapFactory.decodeByteArray(imageData , 0, imageData.length,options); Matrix mat=new Matrix(); mat.postRotate(90); bitmapResult = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(),myImage.getHeight(), mat, true); Canvas c = new Canvas(bitmapResult); drawTextImage(bitmapResult); 

Recibo la imagen la pongo en un mapa de bits, la hago girar y dibujo un texto en ella en el método drawTextImage() . Después de todo esto, almacenar el bitmapResult en sdcard usando esto:

  public static boolean StoreByteImage(Context mContext, Bitmap bitmap, int quality, String expName) { FileOutputStream fileOutputStream = null; String extStorageDirectory=Environment.getExternalStorageDirectory().toString(); File myNewFolder = new File(extStorageDirectory + newFolder); if(myNewFolder.mkdirs()) { myNewFolder.mkdir(); } try { //fileOutputStream = new FileOutputStream(sdImageMainDirectory.toString() +"/image.jpg"); fileOutputStream = new FileOutputStream(myNewFolder +"/"+expName+".jpg"); BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); bitmap.compress(CompressFormat.JPEG, quality, bos); bos.flush(); bos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } 

Usualmente lo llamo así: StoreByteImage(getBaseContext(),bitmapResult,100,String.valueOf(value)); Gracias

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.