解决Android BitmapFactory的基本使用问题
程序员文章站
2022-06-17 22:33:34
问题描述使用方法bitmapfactory.decodefile转化bitmap时报错:java.lang.runtimeexception: canvas: trying to draw too l...
问题描述
使用方法bitmapfactory.decodefile转化bitmap时报错:java.lang.runtimeexception: canvas: trying to draw too large(120422400bytes) bitmap.
解决方案
报错原因:图片转化为bitmap超过最大值max_bitmap_size
frameworks/base/graphics/java/android/graphics/recordingcanvas.java public static final int max_bitmap_size = 100 * 1024 * 1024; // 100 mb /** @hide */ @override protected void throwifcannotdraw(bitmap bitmap) { super.throwifcannotdraw(bitmap); int bitmapsize = bitmap.getbytecount(); if (bitmapsize > max_bitmap_size) { throw new runtimeexception( "canvas: trying to draw too large(" + bitmapsize + "bytes) bitmap."); } }
修改如下
//修改前 bitmap image = bitmapfactory.decodefile(filepath); imageview.setimagebitmap(image); //修改后 import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.util.displaymetrics; file file = new file(filepath); if (file.exists() && file.length() > 0) { //获取设备屏幕大小 displaymetrics dm = getresources().getdisplaymetrics(); int screenwidth = dm.widthpixels; int screenheight = dm.heightpixels; //获取图片宽高 bitmapfactory.options options = new bitmapfactory.options(); options.injustdecodebounds = true; bitmapfactory.decodefile(filepath, options); float srcwidth = options.outwidth; float srcheight = options.outheight; //计算缩放比例 int insamplesize = 1; if (srcheight > screenheight || srcwidth > screenwidth) { if (srcwidth > srcheight) { insamplesize = math.round(srcheight / screenheight); } else { insamplesize = math.round(srcwidth / screenwidth); } } options.injustdecodebounds = false; options.insamplesize = insamplesize; bitmap bitmap = bitmapfactory.decodefile(filepath, options); imageview.setimagebitmap(bitmap); }
相关参考:
android 图片缓存之 bitmap 详解
https://juejin.cn/post/6844903442939412493
bitmapfactory
https://developer.android.com/reference/android/graphics/bitmapfactory.html
bitmapfactory.options
bitmapfactory.options类是bitmapfactory对图片进行解码时使用的一个配置参数类,其中定义了一系列的public成员变量,每个成员变量代表一个配置参数。
https://blog.csdn.net/showdy/article/details/54378637
到此这篇关于android bitmapfactory的基本使用的文章就介绍到这了,更多相关android bitmapfactory使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: MongoDB的备份与恢复
推荐阅读
-
基于Android SDK-在64位Linux中使用需要注意的问题
-
深入android中The connection to adb is down的问题以及解决方法
-
Android关于WebView中无法定位的问题解决
-
ASP.Net MVC_DotNetZip简单使用方法,解决文件压缩的问题
-
Android 表情面板和软键盘切换时跳闪问题的解决方法
-
Mysql5.7中使用group concat函数数据被截断的问题完美解决方法
-
使用 Eclipse 给 APK 签名遇到的问题及解决方法
-
Vue中android4.4不兼容问题的解决方法
-
Android动态添加View的问题解决方法
-
android 软键盘的POPUP布局的问题解决