返回顶部
首页 > 资讯 > 移动开发 >解决Android BitmapFactory的基本使用问题
  • 876
分享到

解决Android BitmapFactory的基本使用问题

2024-04-02 19:04:59 876人浏览 安东尼
摘要

问题描述 使用方法BitmapFactory.decodeFile转化Bitmap时报错:java.lang.RuntimeException: canvas: trying to

问题描述

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


@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使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://lsjlt.com/news/155877.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 解决Android BitmapFactory的基本使用问题
    问题描述 使用方法BitmapFactory.decodeFile转化Bitmap时报错:java.lang.RuntimeException: Canvas: trying to ...
    99+
    2024-04-02
  • Android注解ButterKnife的基本使用
    ButterKnife的最新版本是8.4.0。 首先,需要导入ButterKnife的jar包。 在AndroidStudio中,File->Project Struct...
    99+
    2022-06-06
    butterknife Android
  • Android RecyclerView基本使用详解
    什么是RecyclerView 关于RecyclerView,是一个主要用于展示和回收View的有一个控件,在官用了一句话来概括 RecyclerView 是一种通过提供有限的...
    99+
    2022-06-06
    recyclerview Android
  • Android中NavigationView的使用与相关问题解决
    一、基本使用 1. NavigationView 在 design 库中,添加依赖(最新的是 23.2.0); compile 'com.android.support:d...
    99+
    2022-06-06
    Android
  • Linux下PureFtpd的基本安装使用与超时问题的解决方法
    这篇文章主要介绍“Linux下PureFtpd的基本安装使用与超时问题的解决方法”,在日常操作中,相信很多人在Linux下PureFtpd的基本安装使用与超时问题的解决方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-12
  • Python2.x版本中基本的中文编码问题解决
    Python 输出 "Hello, World!",英文没有问题,但是如果你输出中文字符"你好,世界"就有可能会碰到中文编码问题。 Python 文件中如果未指定编码,在执行过程会出现报错: #!/u...
    99+
    2022-06-04
    中文 版本
  • android的RecylerView基本使用
    文章目录一、RecylerView基本使用1. 添加依赖2. 添加布局3. 添加adapter4. 添加item_recycler.xml5. ...
    99+
    2022-06-06
    Android
  • Android Button的基本使用
    Android Button是一个常用的用户界面控件,用于在应用程序中显示可点击的按钮。以下是Android Button的基本使用...
    99+
    2023-09-15
    Android
  • Android HttpsUrlConnection基本使用
    工作后一直用各种网络框架,都快把基础知识忘了,抽点时间复习一下基础类的用法。 HttpsUrlConnection  android网络请求类 当然还有HttpUrlConne...
    99+
    2022-06-06
    Android
  • Android AIDL基本使用
    AIDL是Android多进程通讯方式一种。 如要使用 AIDL 创建绑定服务,请执行以下步骤: 创建 .aidl 文件 此文件定义带有方法签名的编程接口。 实现接口 Android SDK 工具会基于您的 .aidl 文件,使用 Java...
    99+
    2023-09-04
    android
  • VMware vCenter Server8 的安装,问题解决及基本配置
    【VMware vCenter Server介绍】        VMware vCenter Server 提供了一个可伸缩、可扩展的平台,为虚拟化管理奠定了基础。可集中管理VMware vSphere环境,与其他管理平台相比,极大地提高...
    99+
    2023-09-02
    服务器 linux 运维 网络
  • 如何使用CSS解决文本溢出问题
    这篇文章主要介绍了如何使用CSS解决文本溢出问题的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用CSS解决文本溢出问题文章都会有所收获,下面我们一起来看看吧。   CS...
    99+
    2024-04-02
  • Android 之 Toast 的基本使用
    本节引言: 好的,终于学习完Adapter类相关的一些控件,当然除了讲解的那几个,还有其他很多的 相关的控件,就不慢慢讲解了~有需要的自行查阅文档,查看相关的用法,本节带来的是: Android用于提示信息的一个控件——Toast(吐司...
    99+
    2023-09-16
    android java 开发语言
  • 使用android studio 版本合并遇到的问题
        前段时间由于需要合并一下android版本,将分支版本合并到主干版本上,由于之前没有搞过类似的事情,结合资料自己摸索了一下,遇到了点小问题,不过最终还是顺利解决了,在此...
    99+
    2022-06-06
    Android Studio studio 版本 Android
  • Android中layer-list基本使用详解
    使用layer-list可以将多个drawable按照顺序层叠在一起显示,默认情况下,所有的item中的drawable都会自动根据它附上view的大小而进行缩放, layer...
    99+
    2022-06-06
    list Android
  • Android 解决build path errors的问题
    新建一个eclipse-android项目后,如test2,从其它项目中拷贝若干个包到test2中, 在编译时总会出现以下错误: ?主要看第三条:The proj...
    99+
    2022-06-06
    path build Android
  • Android的Toast问题怎么解决
    这篇“Android的Toast问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android的Toast问题怎么...
    99+
    2023-06-04
  • 基于@AllArgsConstructor与@Value共用的问题解决
    目录@AllArgsConstructor与@Value共用的问题解决看下面这段代码如何解决这个问题呢?@AllArgsConstructor导致@value注入失败解决方法@All...
    99+
    2024-04-02
  • 详解Android ContentProvider的基本原理和使用
    目录一、前言二、URI(Uniform Resource Identifier)三、MIME四、UriMatcher五、ContentUris5.1、方法使用示例5.2、监听数据变化...
    99+
    2024-04-02
  • 怎么使用Shell脚本解决DDOS攻击问题
    这篇文章主要介绍了怎么使用Shell脚本解决DDOS攻击问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。思路:主要利用 awk ,if结构,sort,uniq#!/bin/...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作