活页夹交易失败

时间:2016-12-31 02:23:06

标签: android bitmap

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

到目前为止,我通过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 个答案:

答案 0 :(得分:0)

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