--
Para participar es necesario que leas detenidamente las normas del grupo: https://goo.gl/xeTRQm
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/CAMRhrXoV8zHD2o%2BDCrsnR%3D0Hx_Wdoo9py%3DX29WAqeLVaSunNVQ%40mail.gmail.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
private String APP_DIRECTORY = "myPictureApp/";
private String MEDIA_DIRECTORY = APP_DIRECTORY + "media";
private String TEMPORAL_PICTURE_NAME = "temporal.jpg";
private final int PHOTO_CODE = 100;
private final int SELECT_PICTURE_NAME = 200;
ImageView imageView;
Button btnFoto;
Bitmap bmp;
Metodo en donde incializo mi boton y el imageView:
public void init(){
imageView = (ImageView)findViewById(R.id.setPicture);
btnFoto = (Button)findViewById(R.id.btnFoto);
btnFoto.setOnClickListener(this);
}Ahora bien tengo un onclick con un CharSequenceswitch (id){
case R.id.btnFoto:
final CharSequence[] options = {
"Tomar foto",
"Seleccionar de galeria",
"Cancelar"
};
final AlertDialog.Builder buldier = new AlertDialog.Builder(MainActivity.this);
buldier.setTitle("Selecciona una opcion");
buldier.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int NumSelect) {
if (options[NumSelect] == "Tomar foto"){
openCamera();
} else if (options[NumSelect] == "Seleccionar de galeria") {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(intent.createChooser(intent, "Selecciona la app de la imagen"), SELECT_PICTURE_NAME);
} else if (options[NumSelect] == "Cancelar") {
dialog.dismiss();
}//Fin del if
}//Fin del onclick dialog
});//Fin del setItems
buldier.show();//Para que se pueda muestra nuestro menu
break;
}//FIn del switch
}//Fin del onclick
Mi metodo para abrir la camara:
private void openCamera() {
File file = new File(Environment.getExternalStorageDirectory(), MEDIA_DIRECTORY);
file.mkdirs();
String path = Environment.getExternalStorageDirectory() + File.separator
+ MEDIA_DIRECTORY + File.separator + TEMPORAL_PICTURE_NAME;
File newFile = new File(path);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(newFile));
startActivityForResult(intent, PHOTO_CODE);
}El activity for Result para que escuche la respuestas:@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case PHOTO_CODE:
if(resultCode == RESULT_OK){
String dir = Environment.getExternalStorageDirectory() + File.separator
+ MEDIA_DIRECTORY + File.separator + TEMPORAL_PICTURE_NAME;
decodeBitmap(dir);
}
break;
case SELECT_PICTURE_NAME:
if(resultCode == RESULT_OK){
Uri path = data.getData();
imageView.setImageURI(path);
}
}
}Y en donde decodifico el Bitmap para agregarlo al ImageViewprivate void decodeBitmap(String dir){
bmp = BitmapFactory.decodeFile(dir);
imageView.setImageBitmap(bmp);
}¿Este codigo que yo tire esta bien echo?Este codigo solo guarda en una memoria externa, e buscado peor no e encotrado nada concreto, como puedo guardar en memoria interna?El metodo que me comentas lo tengo que meter en un nuevo boton, no se que se llame Comprimir imagen? el debe llevar un activity forresult?Perdona o perdonen tantas preguntasMUCHAS GRACIAS POR CONTESTAR
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/CACyA%3DWyV%3DdeGLrr8VsG6PgFcAK7rTR5%3DMG-_ZW9ak9-joHcEWQ%40mail.gmail.com.
private void decodeBitmap(String dir)
Lo modifiques para que te permita usarlo en el switch que tienes en su método :
protected void onActivityResult
ya que hasta donde pude apreciar en esta parte case SELECT_PICTURE_NAME: no lo esta usando.
Te recomendaria que al momento de guardar la imagen realices la compresión ; te adjunto algunas paginas donde muestran como almacenar una imagen en la memoria interna :
http://stackoverflow.com/questions/17674634/saving-and-reading-bitmaps-images-from-internal-memory-in-android
http://www.resolvinghere.com/sof/12352991.shtml
Ademas en la version de android lollipop ha cambiado un poco el API de la Camara al momento de lanzar el intent puede revisarlo en:
http://stackoverflow.com/questions/29778467/camera-image-capture-does-not-return-data-on-some-devices
https://developer.android.com/intl/es/training/camera/photobasics.html#TaskCaptureIntent
Saludos
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/CAMRhrXrB2Gf%2BS%2BwYq0MC19M0x3ZhaM1mhJwFrddQ6A9RzDaRig%40mail.gmail.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/CACyA%3DWyR-bTwMm763SCCs2CKQwbo0N%3DKKdf2TQ43mkH7nB044Q%40mail.gmail.com.
private void scaleImage()
{
// Obtener el ImageView y su mapa de bits
ImageView view = (ImageView) findViewById(R.id.imagen);
Drawable drawing = view.getDrawable();
if (drawing == null) {
return; // Checking for null & return, as suggested in comments
}
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
// Obtener las dimensiones actuales y la caja de unión deseada
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int bounding = dpToPx(400);
Log.i("Test", "original width = " + Integer.toString(width));
Log.i("Test", "original height = " + Integer.toString(height));
Log.i("Test", "bounding = " + Integer.toString(bounding));
txtTest.setText("Original Width: " + width + "\n" + "Original Height: " + height);
//Determinar la cantidad de escala : la dimensión que requiere menos de escala es
// Más cerca de la de sus lados. De esta manera la imagen se mantiene siempre dentro de su
// Cuadro delimitador y sea x / y eje de la toca .
float xScale = ((float) bounding) / width;
float yScale = ((float) bounding) / height;
float scale = (xScale <= yScale) ? xScale : yScale;
Log.i("Test", "xScale = " + Float.toString(xScale));
Log.i("Test", "yScale = " + Float.toString(yScale));
Log.i("Test", "scale = " + Float.toString(scale));
// Crear una matriz para el escalado y añadir los datos de escala
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
bmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
width = bmp.getWidth();
height = bmp.getHeight();
BitmapDrawable result = new BitmapDrawable(bmp);
Log.i("Test", "scaled width = " + Integer.toString(width));
Log.i("Test", "scaled height = " + Integer.toString(height));
txtTest1.setText("Scale width: " + width + "\n" + "Scale height: " + height);
view.setImageDrawable(result);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
Log.i("Test", "done");
}
private int dpToPx(int dp)
{
float density = getApplicationContext().getResources().getDisplayMetrics().density;
return Math.round((float)dp / density);
}
Ahora bien, una vez que ya tengo escalada la imagen lo que me gustaria hacer es guardar la imagen que acabo de escalar.
¿Me podrias ayudar con esa parte?
GRACIAS!!
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/CACyA%3DWyR-bTwMm763SCCs2CKQwbo0N%3DKKdf2TQ43mkH7nB044Q%40mail.gmail.com.