una - Android obtiene la imagen a tamaño completo de la cámara
photoutils android (1)
Creo que el problema es que todavía estás intentando acceder a la miniatura del Intent
. Para recuperar la imagen a tamaño completo, necesita acceder al archivo directamente. Así que recomiendo guardar el nombre del archivo antes de comenzar la actividad de la cámara y luego cargar el archivo en onActivityResult
.
Sugiero leer la página Taking Photos Simply de la documentación oficial donde encontrará esta cita con respecto a la miniatura:
Nota: Esta imagen en miniatura de "datos" podría ser buena para un ícono, pero no mucho más. Tratar con una imagen de tamaño completo requiere un poco más de trabajo.
También en la última sección, encontrará el código que necesita:
private void setPic() {
// Get the dimensions of the View
int targetW = mImageView.getWidth();
int targetH = mImageView.getHeight();
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
// Determine how much to scale down the image
int scaleFactor = Math.min(photoW/targetW, photoH/targetH);
// Decode the image file into a Bitmap sized to fill the View
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
mImageView.setImageBitmap(bitmap);
}
Estoy desarrollando una aplicación de Android que carga una imagen de la cámara o desde la galería de fotos del dispositivo al sitio remoto. Lo último que tengo funcionando bien, puedo seleccionar y subir. Sin embargo, tengo problemas para tomar una imagen de tamaño completo y cargarla. Este es mi código:
// From onCreate
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Tengo un método para manejar el resultado de la actividad. Esto permite seleccionar desde la galería y desde la cámara:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
String filepath = "";
Uri selectedImageUri;
if (resultCode == RESULT_OK) {
if (requestCode == CAMERA_PIC_REQUEST) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
// Gets real path of image so it can be uploaded
selectedImageUri = getImageUri(getApplicationContext(), photo);
}
else {
selectedImageUri = data.getData();
}
// Handle the upload ...
}
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
Sin embargo, esto funciona, la imagen es pequeña y no sigue la convención de nomenclatura para imágenes almacenadas. He leído que para ahorrar tamaño necesito usar putExtra y pasar MediaStore.EXTRA_OUTPUT en la cámara y declarar un archivo temporal, así que he adaptado mi código de intención de la siguiente manera:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
camImgFilename = sdf.format(new Date())+".jpg";
File photo = new File Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), camImgFilename);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Sin embargo, esto genera un error que indica "Fuente no encontrada".
¿No estás seguro de dónde proceder desde aquí?
ACTUALIZAR
Parece que mi foto está siendo creada. Una vez que la aplicación se haya cerrado, puedo navegar con el explorador de archivos al directorio y ver la imagen. No estoy seguro de qué causa la falla de la aplicación.