Android: сохранение изображения в файл и получение его - PullRequest
1 голос
/ 28 июля 2011

Сделав снимок с помощью камеры, я хочу сохранить его в этом макете.Я также хочу сохранить его в файл и иметь возможность загружать это изображение при создании действия (поэтому, если я переключаюсь на другое действие и возвращаюсь к этому).На данный момент я могу сделать снимок и отобразить его, но если я переключаю действия более одного раза, изображение теряется. У меня есть следующий соответствующий код:

Я загружаю свое изображение OnCreate, используя setImage():

private void setImage(){
    if (loadPicture("hello", bitmap) != null) {
        Toast.makeText(this, "not null", Toast.LENGTH_SHORT).show();
        imageView.setImageBitmap(loadPicture("hello", bitmap));
    }
}

private void takePicture(){
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File photo =
            new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
    imageUri = Uri.fromFile(photo);
    startActivityForResult(intent, 0);

}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
        Uri selectedImage = imageUri;
            getContentResolver().notifyChange(selectedImage, null);

            ContentResolver cr = getContentResolver();

            try {
                bitmap = android.provider.MediaStore.Images.Media
                        .getBitmap(cr, selectedImage);

                imageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, bitmap.getHeight()/2, bitmap.getWidth()/2, false));
                //**Where I save the picture**
                savePicture("hello", bitmap, getApplicationContext());


     }

private void savePicture(String filename, Bitmap b, Context ctx){
    try {
        ObjectOutputStream oos;
        FileOutputStream out;// = new FileOutputStream(filename);
        out = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
        oos = new ObjectOutputStream(out);
        b.compress(Bitmap.CompressFormat.PNG, 100, oos);

        oos.close();
        oos.notifyAll();
        out.notifyAll();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private Bitmap loadPicture(String filename, Bitmap b){
    // Drawable myImage = null;
    try {
        FileInputStream fis = openFileInput(filename);
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(fis);
        } catch (StreamCorruptedException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        // myImage = Drawable.createFromStream(ois, filename);
        b = BitmapFactory.decodeStream(ois);
        try {
            ois.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    // return myImage;
    return b;

}

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Звучит так, будто ваш код работает, но вы теряете свой образ, когда активность возвращается.Загрузка вашей картинки в onPostResume () вместо onCreate () может быть то, что вам нужно.Такое ощущение, что жизненный цикл активности - это ключ к вашей проблеме.У меня есть пара вопросов, которые я добавлю в комментарии.

0 голосов
/ 28 июля 2011
out = ctx.openFileOutput(filename, Context.MODE_PRIVATE);

Попробуйте переключиться на:

out = ctx.openFileOutput(filename, Context.MODE_WORLD_READABLE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...