Почему меня не создает .png изображения, выбранного в Галерее?

Почему мне не верит .png, что я пытаюсь сделать так, чтобы он создал отборного изображения?

public class ClaseNueva extends Activity {

    private ImageView imagenPersona;
    private int SELECCIONAR_IMAGEN = 237487;
    private Uri pathImagenUri;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.clase_nueva);

        imagenPersona = (ImageView) findViewById(R.id.imagenPersona);


        imagenPersona.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                ventanaImagen();
            }
        });
    }

    private void ventanaImagen() {
        try {
            final CharSequence[] items = {"Seleccionar de la galería"};

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Seleccionar una foto");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    switch (item) {
                        case 0:
                            Intent intentSeleccionarImagen = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
                            intentSeleccionarImagen.setType("image/*");
                            startActivityForResult(intentSeleccionarImagen, SELECCIONAR_IMAGEN);
                            break;
                    }
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        } catch (Exception e) {
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == SELECCIONAR_IMAGEN && resultCode == Activity.RESULT_OK) {
            if (pathImagenUri != null) {

                File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
                File file = new File(dir, "resized_image.png");

                Uri imagenSeleccionada = pathImagenUri;
                Bitmap bitmap = getBitmap(pathImagenUri.getPath());

                if (bitmap != null) { //Bitmap no es null?

                    //Redimnsiona imagen.
                    Bitmap bitmapout = Bitmap.createScaledBitmap(bitmap, 150, 150, false);
                    FileOutputStream fOut = null;
                    try {
                        fOut = new FileOutputStream(file);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                    bitmapout.compress(Bitmap.CompressFormat.PNG, 100, fOut);
                    try {
                        fOut.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        fOut.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                } else {
                    Toast.makeText(this, "Error obteniendo imagen", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(this, "Error obteniendo imagen", Toast.LENGTH_LONG).show();
            }
        }
    }

    private Bitmap getBitmap(String ruta_imagen) {
        File imagenArchivo = new File(ruta_imagen);
        Bitmap bitmap = null;
        if (imagenArchivo.exists()) {
            bitmap = BitmapFactory.decodeFile(imagenArchivo.getAbsolutePath());
        }
        return bitmap;
    }
}

Я не получаю никакой ошибки, просто не верьте: Из чего он проистекает?

6
задан 25.02.2017, 00:52
0 ответов

Если ты используешь startActivityForResult() получив данные об изображении посредством bundle в onActivityResult(), ты можешь получать path этой формы создавать bitmap, redimensionarlo и сохранять это в другом path (переменная nuevaRutaArchivo);

private static final String TAG = "MainActivity";
private ImageView imagenPersona;
private Uri pathImagenUri;
private int PICK_IMAGE_REQUEST = 1;


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);


    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {

        Uri uri = data.getData();

        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);


            /*//Muestra imagen seleccionada de galería en ImageView.
            ImageView imageView = (ImageView) findViewById(R.id.imagenPersona);
            imageView.setImageBitmap(bitmap);*/

            //Define path donde sera guardada una nueva imagen con medidas 150x150px
            File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
            File file = new File(dir, "resized_jorgesys.png");

            if (!file.exists()) { //Si archivo no existe.
                try {
                    file.createNewFile(); //Procede a crearlo.
                } catch (IOException e) {
                    Log.e(TAG, e.getMessage());
                }
            }

            if (bitmap != null) {

                //Redimensiona imagen.
                Bitmap bitmapout = Bitmap.createScaledBitmap(bitmap, 150, 150, false);
                FileOutputStream fOut = null;
                try {
                    fOut = new FileOutputStream(file);
                    bitmapout.compress(Bitmap.CompressFormat.PNG, 100, fOut);
                    fOut.flush();
                    fOut.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    Log.e(TAG, e.getMessage());
                }

                //Muestra imagen con nuevas medidas en ImageView.
                ImageView imageView = (ImageView) findViewById(R.id.imagenPersona);
                imageView.setImageBitmap(bitmapout);

            } else {
                Toast.makeText(this, "Error obteniendo imagen", Toast.LENGTH_LONG).show();
            }




        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
        }


    }
}

В конце концов изображение с новым средством присоединяется в ImageView:

introducir la descripción de la imagen aquí

3
ответ дан 03.12.2019, 17:53
  • 1
    Привет ´ прощение, corregí линия có я говорю: Bitmap bitmap = Bitmap.createScaledBitmap (bitmap, 150, 150, false); –  04.01.2017, 17:02
  • 2
    Эта линия не необходима –  04.01.2017, 17:42
  • 3
    nuevaRutaArchivo - path где guardarí в файл, я это комментирую в ответе. –  04.01.2017, 17:53
  • 4
    Ok realicé изменение в có я говорю. –  20.02.2017, 22:03
  • 5
    @UserNameYo edité ответ, но забудьте изменить эту переменную, в действительности он file, это путь где guardará архив, в этом примере он принадлежит оператору: getExternalStoragePublicDirectory (Environment. DIRECTORY_DCIM), ты можешь определять path, который ты желаешь. –  21.02.2017, 00:57