【问题标题】:Failed binder transaction失败的活页夹交易
【发布时间】:2016-12-31 02:23:06
【问题描述】:

当我的用户点击我希望放大的图片时,我的应用会显示图片和文字。

到目前为止,我是通过显示 BitmapActivity 来完成的:

// 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: !!! Binder 交易失败!!!

一些研究让我降低图像质量以便像这样显示它:

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;
}

我现在想以更大的尺寸显示它。

【问题讨论】:

    标签: android bitmap


    【解决方案1】:

    不要通过意图传递图像。 Intent 旨在保存少量数据,而不是图像。将其写入文件系统,并通过intent传递文件名。

    【讨论】:

    • 有什么例子可以说明这一点吗?
    • @ChristopherK。将图像写入文件:stackoverflow.com/questions/28561263/….
    • 这张图片来自哪里?它不是已经在您的文件系统中了吗?看起来不像你在使用相机
    • 我通过 API 获取图片的 URL 并通过 Glide 加载。
    猜你喜欢
    • 2015-08-27
    • 2021-05-11
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2023-02-07
    相关资源
    最近更新 更多