当前位置: 首页 > 知识库问答 >
问题:

基于位图的多输入流解码

柏修洁
2023-03-14

我从smartwatch收到一个DataMap对象,其中包含两个DataMap对象,一个包含字符串列表(标题、字幕、内容……),另一个包含资产列表

List<DataMap> rootItemDataMap [...]
  DataMap itemFieldsDataMap = rootItem.getDataMap(Constants.ROOT_ITEM_FIELDS);
  DataMap itemImagesDataMap = rootItem.getDataMap(Constants.ROOT_ITEM_IMAGES);

当调用onDataChanged时,我转换字符串中的itemFieldDataMap和资产列表中的itemImagesDataMap。对于每一个资产,我希望转换位图中的资产,并将其放在位图列表中。但我有一个错误:

List<Bitmaps> imagesList = new ArrayList<>();
for (int j = 0; j < itemImagesDataMap.size(); j++) {
        Asset asset = itemImagesDataMap.getAsset(Constants.EXTRA_IMAGE +j);
        Bitmap bitmap = WearableUtils.loadBitmapFromAsset(mGoogleApiClient, asset);
        imagesList.add(bitmap);
}

做不好工作的方法是LoadBitMapFromAsset:

public static Bitmap loadBitmapFromAsset(GoogleApiClient mGoogleApiClient, Asset asset) {
    InputStream assetInputStream = Wearable.DataApi.getFdForAsset(mGoogleApiClient, asset).await().getInputStream();
    return BitmapFactory.decodeStream(assetInputStream);
}
java.lang.OutOfMemoryError: Failed to allocate a 2531852 byte allocation with 1037608 free bytes and 1013KB until OOM
                                                     at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
                                                     at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:635)
                                                     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:611)
                                                     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:649)
                                                     at com.mangomobi.showtime.contentmanager.WearableUtils.loadBitmapFromAsset(WearableUtils.java:71)
                                                     at com.mangomobi.showtime.contentmanager.ItemFactoryImpl.createItems(ItemFactoryImpl.java:48)
                                                     at com.mangomobi.showtime.contentmanager.WearableContentServiceImpl.onDataChanged(WearableContentServiceImpl.java:136)
                                                     at com.google.android.gms.wearable.WearableListenerService$zzc$1.run(Unknown Source)
                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                     at com.google.android.gms.wearable.WearableListenerService$zzb.dispatchMessage(Unknown Source)
                                                     at android.os.Looper.loop(Looper.java:148)
                                                     at android.os.HandlerThread.run(HandlerThread.java:61)

共有1个答案

乐正迪
2023-03-14

您可能希望首先检查是否有效地加载大位图,其中提到:

为了避免java.lang.outofmemory异常,在解码位图之前检查位图的尺寸,除非您绝对相信源能够提供适合可用内存的可预测大小的图像数据。

您可以尝试使用一种方法,根据目标宽度和高度计算样本大小的二次方,如文档中的示例代码所示。如进一步讨论的,

    null
 类似资料:
  • 问题内容: 我将输入流从Web转换为位图时遇到问题。仅当输入图像类型为.BMP(位图)时,才会出现问题。在这种情况下: bitmapFactory.decodeStream返回null 。 有什么提示如何解决此问题,或者应该在哪里继续调试? 平台:Android(蜂窝) 问题答案: 谢谢@Amir指出日志。发现了一条线: 这似乎是一个普遍的问题。进行搜索后,我找到了解决方案。 我以前的代码: 起作

  • 我有一个输入流,其中包含XML数据,我想在返回输入流之前对其进行解析。 当然,我可以将流保存为字节数组,并从中返回一个新的InputStream,或者 在“myObj”上创建第二个InputStream。 但是有什么方法可以“即时”解析流吗? 编辑: 基本上,我正在寻找一种在解析后重用流的方法。在不消耗流的情况下解析流,分别在解析后重置流。 解决方案: 我找到的解决方案是使用BufferedInp

  • 我想创建基于自动完成输入的动态谷歌地图。我把代码写成:- 地图没出现。请解决它..我通过参考https://youtu.be/2n_r0ndekgc上的视频编写了代码

  • 对手转向 游戏等待用户 用户将文本键入JtextField并按Enter键 游戏执行玩家命令 对手再次转向..

  • 在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据。 例如,假设操作系统的堆栈已收到三个数据包: 由于基于流的协议的这种通用属性,在应用程序中以下面的碎片形式(只

  • 本文向大家介绍Python最基本的输入输出详解,包括了Python最基本的输入输出详解的使用技巧和注意事项,需要的朋友参考一下 输出 用print加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world',用代码实现如下: print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出: print会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串