出现:trying to draw too large(138078000bytes) bitmap:

本文描述了一种常见的图片资源放置错误,即将高分辨率的图片(例如1080*1920)错误地放置在低分辨率的drawable文件夹中,导致应用运行时出现异常。文章提供了正确的解决方案,即根据图片的分辨率选择合适的文件夹进行存放。

出现原因:将高分辨率图片放在了低分辨率文件夹下了

我遇到的情况是我把1080*1920分辨率的切图放在了drawable文件夹下,出现了如题的报错,
解决的方法:根据分辨率选择放置所在文件夹

提供的引用中未提及在Android Studio中解决“Canvas trying to draw too large bitmap”问题的解决方案,不过可以根据一般的经验给出一些常见的解决办法。 ### 缩放位图 在将位图绘制到Canvas之前,将其缩放到合适的大小。可以使用`BitmapFactory.Options`来进行缩放。 ```java BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; // 设置采样率,这里设置为2表示缩小为原来的1/2 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.large_image, options); ``` ### 分块绘制 如果位图过大无法一次性绘制,可以将其分成多个小块,然后逐块绘制到Canvas上。 ```java int blockWidth = 100; int blockHeight = 100; for (int x = 0; x < bitmap.getWidth(); x += blockWidth) { for (int y = 0; y < bitmap.getHeight(); y += blockHeight) { int width = Math.min(blockWidth, bitmap.getWidth() - x); int height = Math.min(blockHeight, bitmap.getHeight() - y); Bitmap block = Bitmap.createBitmap(bitmap, x, y, width, height); canvas.drawBitmap(block, x, y, null); } } ``` ### 释放不再使用的资源 及时释放不再使用的位图资源,避免内存占用过高。 ```java if (bitmap != null && !bitmap.isRecycled()) { bitmap.recycle(); bitmap = null; } ``` ### 检查设备内存状态 在绘制之前检查设备的内存状态,如果内存不足,可以采取相应的措施,如减少绘制的内容或提示用户清理内存。 ```java ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); activityManager.getMemoryInfo(memoryInfo); if (memoryInfo.lowMemory) { // 内存不足,采取相应措施 } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值