欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

解决Android BitmapFactory的基本使用问题

时间:2022-12-24 13:52:20|栏目:Android代码|点击:

问题描述

使用方法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

上一篇:关于Kotlin委托你必须重视的几个点

栏    目:Android代码

下一篇:没有了

本文标题:解决Android BitmapFactory的基本使用问题

本文地址:http://www.codeinn.net/misctech/222131.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有