在 Android 中使用 Intent 在 Activity 中传递 Android 位图数据

2023-12-26

我有一个名为的位图变量bmp在活动 1 中,我想将位图发送到活动 2

以下是我用来传递它的意图的代码。

Intent in1 = new Intent(this, Activity2.class);
in1.putExtra("image",bmp);
startActivity(in1);

在 Activity2 中,我尝试使用以下代码访问位图

Bundle ex = getIntent().getExtras();
Bitmap bmp2 = ex.getParceable("image");
ImageView result = (ImageView)findViewById(R.Id.imageView1);
result.setImageBitmap(bmp);

应用程序运行没有异常,但没有给出预期结果


在将其添加到意图、发送出去并解码之前,将其转换为字节数组。

//Convert to byte array
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Intent in1 = new Intent(this, Activity2.class);
in1.putExtra("image",byteArray);

然后在活动 2 中:

byte[] byteArray = getIntent().getByteArrayExtra("image");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

edit

我想我应该用最佳实践来更新它:

在第一个活动中,您应该将位图保存到磁盘,然后在下一个活动中加载它。确保在第一个活动中回收位图以准备垃圾回收:

活动一:

try {
    //Write file
    String filename = "bitmap.png";
    FileOutputStream stream = this.openFileOutput(filename, Context.MODE_PRIVATE);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
    
    //Cleanup
    stream.close();
    bmp.recycle();

    //Pop intent
    Intent in1 = new Intent(this, Activity2.class);
    in1.putExtra("image", filename);
    startActivity(in1);
} catch (Exception e) {
    e.printStackTrace();
}

在活动 2 中,加载位图:

Bitmap bmp = null;
String filename = getIntent().getStringExtra("image");
try {
    FileInputStream is = this.openFileInput(filename);
    bmp = BitmapFactory.decodeStream(is);
    is.close();
} catch (Exception e) {
    e.printStackTrace();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 中使用 Intent 在 Activity 中传递 Android 位图数据 的相关文章

随机推荐

  • 反应本机相机胶卷

    没有注意到太多关于如何使用 React Native 中的 CameraRoll 库的示例代码 指南 我发现文档中的示例有点 模糊 且令人困惑 我第一次使用任何 API 所以我也不完全理解我应该如何使用该库 到目前为止 我已经将其导入为 i
  • VBA,如果字符串包含某个字母

    我通常不与VBA我无法弄清楚这一点 我试图确定电子表格上的字符串中是否包含某个字母 Private Sub CommandButton1 Click Dim myString As String RowCount WorksheetFunc
  • 为什么 Chrome 无法检查 Docker 容器中的 NodeJS 代码?

    我尝试在 Docker 容器内启动简单的 NodeJS 服务器并使用 chrome inspect 或 WebStorm 对其进行调试 调试端口9229已绑定但检查不起作用 另一方面 当我在没有 docker 的情况下运行相同的代码时 我可
  • 使用 jsPDF rtl 支持将 Html 转为 pdf

    我正在尝试使用 Angular 5 将 html 转换为 pdf这是我的代码 import as jsPDF from jspdf htmlToPdf var doc new jsPDF var specialElementHandlers
  • 从多对多关系续集中选择

    我尝试从一个表中选择并引用另一个表 我在餐桌食品和餐桌配料之间存在多对多的关系 食品型号 module exports function sequelize DataTypes return sequelize define food id
  • 多次读取 Option<&mut T> 的引用

    我有一个Option lt mut T gt 并且想要多次访问包含的引用 如下所示 fn f a Option lt mut i32 gt if let Some x a x 6 if let Some x a x 7 fn main le
  • 如何使用PDF.JS显示整个PDF(不仅仅是一页)?

    我创建了这个演示 http polishwords com pl dev pdfjs test html http polishwords com pl dev pdfjs test html 它显示一页 我想显示所有页面 一个在另一个下
  • 长时间运行的 Android“服务”

    我有一个 Android 应用程序 其中 活动 会触发在后台运行的长时间运行的操作 这些操作完成后与活动交互 我正在开发一个处理活动 长时间运行任务耦合的组件 负责销毁和重新创建活动 现在该组件已作为 Android 服务实现 活动调用bi
  • 字谜索引计算[重复]

    这个问题在这里已经有答案了 给定一个由字符 A Z 组成的最长 25 个字符的输入字符串 输出其在输入字符串所有可能的字谜词按字母顺序排序的列表中的索引 输入字符串不区分大小写 输入的字符可以重复 该应用程序必须在 500 毫秒内完成 并且
  • 通过 JavaScript 进行 Base64URL 解码?

    所以我很困惑 我知道有很多用于 JS 的 Base64 编码器 解码器 但没有用于修改后的 以及 Facebook 喜欢的 Base64URL 变体 到目前为止 在 stackoverflow 上的搜索已经一无所获 是的 我可以使用 PHP
  • 是否有相当于 ChronoUnit. Between 的函数返回分数而不是整数?

    方法是这样的ChronoUnit HOURS between start end 回报long所以我无法从那里得到分数 是否有另一种方法 方法可以返回分数 整个要点ChronoUnit HOURS between start end 是获取
  • New-Object 在 PowerShell 2 上失败,并出现“找不到构造函数”错误

    我有以下脚本在 PowerShell 5 上运行良好 NetworkChange New Object System Net NetworkInformation networkchange Register ObjectEvent Inp
  • Android 2.2+ 中的拨出电话已应答状态

    在我的应用程序中 我发起了拨出呼叫 并使用 PhoneStateListener 来了解呼叫状态 每当我开始打电话时 电话状态都是TelephonyManager CALL STATE OFFHOOK 当呼叫接收者接听电话时 我没有收到电话
  • 查找列中的更改索引

    有没有办法用 R 找到列中因子变化的索引 例如 x lt c aaa aaa aaa bbb bbb ccc ddd 将返回 3 5 6 您可以尝试比较移位向量 例如 which x 1 x length x 1 3 5 6 这对角色都有效
  • 将列值收集到数组中

    我在开发时经常遇到的模式之一是尝试将对象集合中的列 属性值收集到数组中 例如 ids array foreach documents as document ids document gt name 我是唯一遇到这种情况的人吗 PHP 有没
  • 将 -std=gnu++11 编译器标志添加到 QMake

    我正在 Windows 上使用 mingw32 和 g 4 9 3 编译 qt5 7 执行configure bat时 我收到此错误 C qt everywhere opensource src 5 7 0 configure bat pr
  • openejb嵌入式容器找不到persistence.xml

    我在嵌入模式下使用 openEjb 来测试无状态会话 bean 它有一个注入的 EntityManager 但是 当我运行测试时 它失败了 因为它无法初始化应用程序 当我看到控制台时 我还可以看到与无法找到 persistence xml
  • 如何让 grep 在一行中的第一个匹配处停止?

    嗯 我有一个文件 test txt test txt odsdsdoddf112 test1 for grep dad23392eeedJ test2 for grep Hello World test garbage 我想提取后面有空格的
  • TortoiseSVN 在 Windows 7 中的哪里保存密码缓存文件? [复制]

    这个问题在这里已经有答案了 TortoiseSVN 在 Windows 7 中的哪里保存密码缓存文件 I found c users USERNAME AppData TSVNCache目录 但它是空的 In c Users USERNAM
  • 在 Android 中使用 Intent 在 Activity 中传递 Android 位图数据

    我有一个名为的位图变量bmp在活动 1 中 我想将位图发送到活动 2 以下是我用来传递它的意图的代码 Intent in1 new Intent this Activity2 class in1 putExtra image bmp sta