概述
问题描述
使用方法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使用内容请搜索靠谱客以前的文章或继续浏览下面的相关文章希望大家以后多多支持靠谱客!
最后
以上就是昏睡金毛为你收集整理的解决Android BitmapFactory的基本使用问题的全部内容,希望文章能够帮你解决解决Android BitmapFactory的基本使用问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复