Tengo una aplicación de Android donde estoy usando la cámara de Android para tomar fotos.Y después de luchar un poco, pude tener mi imagen donde quiero y cómo quiero. El problema final es la calidad de la imagen.aumentar la calidad/claridad/brillo de las fotos tomadas con la cámara de Android
Cuando mi vista previa comienza todo se ve muy claro y genial, pero después de tomar la foto y mostrar el resultado final, la imagen no se ve nada bien.
Así es como mi método surfaceChanged()
parece-donde estoy establecer 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;
}
desvivían por alguien decir lo que es la manera de aumentar la calidad de mis photo.Thanks!
EDIT:
En activity A
, donde se toma la fotografía utilizo un paquete para enviar la imagen a otro activity B
donde almaceno en la 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 que puse en un mapa de bits, la giro y dibujo un texto sobre ella en el método drawTextImage()
. Después de todo esto almaceno la 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;
}
ussually llamarlo así: StoreByteImage(getBaseContext(),bitmapResult,100,String.valueOf(value));
Gracias
Pero se está buscando disaster.There debe ser algo porque cuando tomo una foto con la cámara, fuera de la aplicación ... sólo por diversión, el cuadro se ve precioso! – adrian
Espero que encuentre la solución de lo contrario ... ¡No sé lo que voy a hacer! – adrian
¿A qué se refiere específicamente por calidad? ¿Resolución? ¿Claridad? ¿Brillo? ¿Contraste? ¿Balance de color? Hay muchas cosas que explican la calidad de una foto. –