将高分辨率图像从一个活动传递到另一个活动

时间:2017-02-28 02:45:44

标签: android

我在Android工作室中创建了一个图像过滤器应用程序。首先,用户从图库中选择一个图像,它将显示在imageview中。然后用户点击编辑按钮,该图像显示在我们可以添加过滤器的下一个活动的图像视图中...它可以在低分辨率图像中正常工作但是当我选择任何高分辨率图像时,它会在第一个图像视图中显示但是当我单击编辑时按钮显示应用程序崩溃或我选择的最后一个图像。我搜索了解决方案,但无法找到它。如果有人知道如何解决这个问题,请帮帮我

4 个答案:

答案 0 :(得分:0)

可以通过intent传递的数据大小有限。限制为roughly 500Kb - 您的高分辨率照片将大于此值。

考虑将图像保存到设备上的文件位置,将URI传递给接收活动并将其加载到那里。

答案 1 :(得分:0)

首先粘贴崩溃日志。 然后,而不是传递图像本身只是通过图像路径。 或者只是在一个活动中添加编辑工具和mainView,并使编辑工具不可见!但是你也可以使用片段。

答案 2 :(得分:0)

  

使用putExtra发送Uri路径:

 Intent intent = new Intent(Intent.ACTION_VIEW);
            intent .setClass(ThisActivity.this,  NewActivity.class);
            intent .putExtra("KEY", Uri);
            startActivity(intent );

您只需添加图片路径即可。

答案 3 :(得分:0)

最好将图像保存在存储空间并传递Uri位置,而不是传递图像。

将图像保存在存储中: -

public static Uri saveImageOnExternalStorage(Bitmap capturedBitmap, String imageId) {
    if (null != capturedBitmap ) {

        OutputStream fOutputStream;

        String path = Environment.getExternalStorageDirectory().toString();
    File file = new File(path + "temp", mediaId + ".png");
        file.delete();
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        try {
            if (file.createNewFile()) {
                fOutputStream = new FileOutputStream(file);

                capturedBitmap.compress(COMPRESS_FORMAT, 100, fOutputStream);

                fOutputStream.flush();
                fOutputStream.close();

                return Uri.fromFile(file); // return saved image path on external storage
            }
        } catch (FileNotFoundException e) {
            Log.e(TAG,e.getMessage());
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(TAG,e.getMessage());
        }
    }
    return null;
} 

现在,同样的Uri可以传递下一个活动的意图: -

Intent intent = new Intent(CurrentActivity.this,  LaunchActivity.class);
            intent .putExtra("image_key", Uri);
            startActivity(intent );