Неудачная транзакция связующего

Мое приложение отображает изображение и текст, когда мой пользователь нажимает на эту картинку, я хочу ее увеличить.

До сих пор я делаю это через Activityто, что отображает Bitmap:

// ImageView containing the image.
final ImageView apd = (ImageView) view.findViewById(R.id.apd_image);

    apd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Save ImageView as Bitmap
            apd.setDrawingCacheEnabled(true);
            apd.buildDrawingCache(true);
            Bitmap bitmap = apd.getDrawingCache();

            // Create intent and set image to display.
            Intent intent = new Intent(getActivity(), GalleryDetailsActivity.class);               
            intent.putExtra("image", bitmap);

            //Start details activity
            startActivity(intent);
            apd.destroyDrawingCache();
        }
    });

Вот Activity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gallery_details_activity);

    Bitmap bitmap = getIntent().getParcelableExtra("image");

    ImageView imageView = (ImageView) findViewById(R.id.image);
    imageView.setImageBitmap(bitmap);
}

Но когда я нажимаю на мое изображение, я получаю следующее сообщение об ошибке в отладчике:

E / JavaBinder:!!! НЕУДАЧНАЯ ТРАНЗАКЦИЯ СВЯЗУЮЩЕГО !!!

Некоторые исследования заставили меня снизить качество изображения, чтобы отобразить его таким образом:

final float densityMultiplier = getResources().getDisplayMetrics().density;

int h = (int) (50 * densityMultiplier);
int w = (int) (h * bitmap.getWidth() / ((double) bitmap.getHeight()));

bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);

Это работает, но это не то, что я хочу.

Есть ли способ расширить мой образ и сохранить его качество?

Редактировать:

Как рекомендовано я теперь сохранить мою фотографию в моей файловой системе, как такие:

  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 = null;

    try {
        FileInputStream fis = openFileInput(filename);
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(fis);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        b = BitmapFactory.decodeStream(ois);
        try {
            ois.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

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

Теперь я хочу показать его в большем размере.

1 ответ

  1. Не передавайте Изображение через intent. Intents предназначены для хранения небольшого количества данных, а не изображений. Запишите его в файловую систему и передайте имя файла через intent.