Bitmap too large to be uploaded into a texture 解决方案

DQN深度强化学习核心原理与工程实现:从Q-Learning到经验回放 强化学习是机器学习的重要分支,智能体通过与环境交互学习最优策略。传统Q-Learning依赖表格存储状态-动作值,在状态空间庞大时面临维度灾难。深度强化学习(DQN)用深度神经网络替代Q表,实现从状态到动作价值的函数逼近,完成高维状态下的策略学习。DQN解决两大关键挑战:经验回放打破样本相关性,目标网络稳定训练目标,使神经网络版本的Q-Learning在复杂任务中稳定收敛。该技术广泛应用于游戏AI、机器人控制、自动驾驶等需要序贯决策的场景。掌握DQN的实现细节与调优方法,是迈向现代强化学习工程实践的必经之路 阅读详情
今天用ImageView加载图片时,图片并不能显示,logcat中打印出了 Bitmap too large to be uploaded into a texture (4160x3120, max=4096x4096)的错误提示。
在网上搜索了一番,因为当开启硬件加速的时候,GPU对于openglRender 有一个限制,这个不同的手机会有不同的限制:

这个限制值可以通过canvas.getMaximumBitmapHeight()和canvas.getMaximumBitmapWidth()来获得。

网上一个简单粗暴的方法是关闭硬件加速:

<application
 android:hardwareAccelerated="false" >

这样的确解决了图片,但你会在app运行的时候,发现app变得十分卡顿。

果断抛弃了这个方法,百度了好久也没找到个像样的解决方案,大多都是东抄西抄,放弃了百度。


认真看看提示,是Bitmap too large 。我突然想起很早很早之前看过郭神的一篇关于加载大图OOM的问题的一篇博客。

我们只要通过BitmapFactory.Options对象对图片进行压缩就好了。废话不多说,我直接在ImageUtil类中写下了图片压缩的方法。


public static int calculateInSampleSize(BitmapFactory.Options options,
                                            int reqWidth, int reqHeight) {
        // 源图片的高度和宽度
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;
        if (height > reqHeight || width > reqWidth) {
            // 计算出实际宽高和目标宽高的比率
            final int heightRatio = Math.round((float) height / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);
            // 选择宽和高中最小的比率作为inSampleSize的值,这样可以保证最终图片的宽和高
            // 一定都会大于等于目标的宽和高。
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
        return inSampleSize;
    }

    public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
                                                         int reqWidth, int reqHeight) {
        // 第一次解析将inJustDecodeBounds设置为true,来获取图片大小
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);
        // 调用上面定义的方法计算inSampleSize值
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
        // 使用获取到的inSampleSize值再次解析图片
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeResource(res, resId, options);
    }

    public static Bitmap decodeSampledBitmapFromFilePath(String imagePath,
                                                         int reqWidth, int reqHeight) {
        // 第一次解析将inJustDecodeBounds设置为true,来获取图片大小
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(imagePath, options);
        // 调用上面定义的方法计算inSampleSize值
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
        // 使用获取到的inSampleSize值再次解析图片
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(imagePath,options);
    }

 然后在需要的地方调用就好了,上面的代码也是直接参考郭神的博客中的代码的,注释已经很清楚了。

最后在需要的地方调用我们的方法:

imageView.setImageBitmap(ImageUtil.decodeSampledBitmapFromFilePath(imagePath,100,100));

通过图片压缩,我们的图片能够被正常的显示了。


希望通过这篇文章,能够帮助遇到Bitmap too large to be uploaded into a texture深陷百度不能自拔的小伙伴能够快速解决。


资料参考:

郭霖  :Android高效加载大图、多图解决方案,有效避免程序OOM   

http://blog.youkuaiyun.com/sinyu890807/article/details/9316683

Android Matrix处理ImageView中图片缩放,平移 Android、Matrix、ImageView、Bitmap结合使用 立即下载

相关推荐

Android-Android加载大图可以高清显示10000*10000像素的图片轻松实现微博长图功能

Android 加载大图 可以高清显示10000*10000像素的图片,轻松实现微博长图功能

Bitmap too large to be uploaded into a texture问题的解决方法

当加载的图片过大时,通常采用的方法是直接按照图片的比例

siyehua的专栏 6437

Graphics of Large Datasets_Visualizing a Million.part3

Graphics of Large Datasets_Visualizing a Million

Bitmap too large to be uploaded into a texture (1284x5582, max=4096x4096)

项目中加载一个尺寸1284x5582的一张大图,使用加载图片的是Picasso.由于图片太大,控件无法显示. 查看log发现出现:Bitmap too large to be uploaded into a texture (1284x5582, max=4096x4096); 经过查找资料是因为当开启硬件加速的时候,GPU对于openglRender 有一个限制,这个不同的手机会有不同的限制。 解决办法:在清单文件Manifest里面的application标签下添加 android:hardwar

zhangmiaoping23的专栏 293

用Multisim和AD2复刻经典:手把手教你搭建μA741三角波-方波发生器(附完整避坑指南)

本文详细介绍了如何使用Multisim和AD2搭建基于μA741运算放大器的三角波-方波发生器,包括电路原理、Multisim仿真流程、AD2硬件搭建及调试技巧。通过对比理论计算、仿真和实测数据,深入分析器件非理想特性的影响,并提供16个典型问题的解决方案,帮助读者掌握波形发生器的设计原理和工程调试经验。

weixin_28744423的博客 284

动态掩码语言模型(MLM)优化策略:效率提升与最新技术实践

本文深入探讨了动态掩码语言模型(MLM)的优化策略与技术实践,涵盖核心原理、效率优化及2025年最新突破。重点解析了动态掩码在提升模型性能中的关键作用,包括工程实现、掩码策略演进及混合专家动态掩码等创新技术,为自然语言处理领域的研究与应用提供实用指南。

vscode5coder的博客 220

Bitmap too larget to be uploaded into a texture的解决方法

Bitmap too larget to be uploaded into a texture的解决方法 问题描述 使用canvas.drawBitmap()系列方法时,抛出错误Bitmap too larget to be uploaded into a texture。 问题原因 错误日志的内容是 W/OpenGLRenderer: Bitmap too large to be uploade...

weixin_33766168的博客 294

JESD204B系统设计实战:如何用SYSREF信号搞定多设备时钟同步(附时序图详解)

本文深入探讨了JESD204B系统中SYSREF信号在多设备时钟同步中的关键作用与实现技巧。通过详细分析SYSREF信号的生成、PCB布局和时序调整,提供了一套完整的解决方案,帮助工程师解决高速数据转换器与FPGA协同工作中的时钟同步问题。文章还包含时序图详解和实测调试技巧,助力提升系统性能。

weixin_29313239的博客 454

解决:Bitmap too large to be uploaded into a texture exception

简单说就是硬件加速的时候,对图片的大小有限制。不同设备可能有不同的最大值。这个问题悲催的地方是,程序貌似没有捕获到这个exception, 结果是程序也不报错,图片也显示不出来。只有看debug log才能发现这个error message. 一个解决的方法是禁止硬件加速,简单粗暴:有关 比较好的解决方法是类似google map的实现:将图片分成不同的块,每次加载

xqs251769745的专栏 1380

从Podfile到分享成功:ShareSDK小红书模块集成全流程实战(附视频分享代码)

本文详细介绍了iOS应用如何通过ShareSDK集成小红书分享功能的全流程,包括环境配置、SDK初始化、图片和视频分享实现,以及常见问题排查和性能优化策略。特别针对视频分享这一高频需求场景,提供了完整的代码示例和实战技巧,帮助开发者快速实现社交分享功能。

weixin_42540248的博客 226

将Python爬取的数据导入钉钉多维表

摘要:本文介绍将Python爬取的数据导入钉钉多维表的完整解决方案。首先通过requests库爬取数据并解析为结构化格式,然后使用钉钉开放平台API对接多维表。关键步骤包括获取app_key、app_secret等凭证,通过OAuth2获取access_token,以及批量写入记录。文章详细说明了参数获取位置、字段类型匹配、权限配置等注意事项,并提供了错误处理建议和性能优化方法。适用于需要将网络数据同步到钉钉多维表的开发场景。

IT深耕十余载,大道之简 2131

Bitmap too large to be uploaded into a texture 解决方法

1.现象 从手机相册里面显示图片,但是发现有的图片能显示有的图片不能显示,路径都是对的,程序也没提示任何错误。 打印的日志如下: Bitmap too large to be uploaded into a texture,该日志信息不一定是以错误日志呈现的,但一定会有记录。 2.解决方案 经过查找资料是因为当开启硬件加速的时候,GPU对于openglRender 有一个限制,这个不同的

记录移动开发相关的知识 985

华为OD机试双机位C卷-热点网站统计 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 热点网站统计,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。 华为od机考真题 - 热点网站统计。

qq_45776114的博客 779

android加载长图片出现Bitmap too large to be uploaded into a texture的解决方案

最近做图片预览,加载长图片的时候,出现黑屏,无法加载图片的情况,查看Log,发现报出了Bitmap too large to be uploaded into a texture的错误。(我用的是ImageLoader加载器) 在网上搜了很多文章,最后总结出来的解决方案如下: 出错原因分析: 当开启硬件加速的时候,GPU对于openglRender 有一个限制,这个不同的手机会有不同的限

JJMM2009的专栏 6266

STM32入门教程:水位传感器应用

这是一个简单的STM32水位检测系统的入门教程。希望通过学习本教程,您能对STM32微控制器的基本应用有更深入的了解,并能成功构建一个水位检测系统。如果您需要更详细的代码实例和教程,请参考相关的STM32开发手册和应用笔记。STM32是一款功能丰富且广泛应用于嵌入式系统的微控制器系列。在本教程中,我们将介绍如何使用STM32微控制器和水位传感器构建一个水位检测系统。

wx_linying1029的博客 533

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 250

Bitmap too large to be uploaded into a texture 解决方案(转载)

今天用ImageView加载图片时,图片并不能显示,logcat中打印出了 Bitmap too large to be uploaded into a texture (4160x3120, max=4096x4096)的错误提示。在网上搜索了一番,因为当开启硬件加速的时候,GPU对于openglRender 有一个限制,这个不同的手机会有不同的限制:这个限制值可以通过canvas.getMax...

liangfei8402的专栏 441

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

关于使用ImageLoader出现的Bitmap too large to be uploaded into a texture

https://github.com/nostra13/Android-Universal-Image-Loader/issues/98 http://blog.zfdang.com/2013/03/summary-of-image-processing-in-android/ http://stackoverflow.com/questions/7428996/hw-accelerate

gxhesihong的专栏 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Bitmap too large to be uploaded into a texture

今天想往一个ImageView中添加一个图片,发生了如题的异常,最终ImageView加载图片失败。Google了几种解决方式。第一种,解除限制: Android 所有的渲染都是基于OpenGL的硬件加速,简单说就是硬件加速的时候,对图片的大小有限制。不同设备可能有不同的最大值。所以最粗暴的解决方式就是关闭硬件加速,在AndroidManifest文件中添加如下语句:<application an

seven_forjob的专栏 1166

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (1080x4196, max=4096x4096)

-----当Bitmap大到超出gl_max_texture_size,就会导致bitmap对象无法绘制到ImageView      ----- 问题分析: 既然bitmap太大导致,那就分割大bitmap对象,然后用2个ImageView显示         ------ 举例 -------           -------  demo_layout.xml

musk6的博客 2340

fresco Bitmap too large to be uploaded into a texture

fresco加载图片方法 布局文件引入 xmlns:fresco="http://schemas.android.com/apk/res-auto" &lt;com.facebook.drawee.view.SimpleDraweeView android:id="@id/img_icon" android:layout_width="42.0d...

weixin_34407348的博客 135
上一篇: RecyclerView中CheckBox显示混乱的解决办法
下一篇: Android 获取栈最顶层Activity和Application Context解决方案
VikcyWinner
博客等级 码龄11年 12粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值