首页 > 其他分享 >Android开发 - BitmapFactory 类解码图像文件并转换为 Bitmap 对象与 BitmapFactory.Options 的使用解析

Android开发 - BitmapFactory 类解码图像文件并转换为 Bitmap 对象与 BitmapFactory.Options 的使用解析

时间:2024-09-03 15:14:06浏览次数:10  
标签:Options BitmapFactory 图像 Bitmap options 加载

BitmapFactory 是什么

  • BitmapFactory 用于解码图像文件,并将它们转换Bitmap 对象Bitmap 是用来表示图像基本类,它是一个位图抽象表示BitmapFactory 提供了一组静态方法,这些方法可以用来将各种图像文件格式(如 PNG、JPEG、WEBP 等)解码成 Bitmap 对象

BitmapFactory 的好处

  • 当需要在应用程序中显示图像时,需要先将图像文件(例如,存储在资源文件夹中的 PNG 文件)转换为 Bitmap 对象。这是因为 ImageView其他 UI 组件使用 Bitmap 对象展示图像

常用方法解析

  • BitmapFactory.decodeResource(Resources res, int id):从应用程序的资源文件中加载图像。资源文件通常位于 res/drawable 目录

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image);
    
    • 参数解析
      • res:应用程序的资源对象
      • id图像资源的 ID
  • BitmapFactory.decodeFile(String path):从文件路径加载图像;适用于从设备存储中加载图像

    Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/sample_image.png");
    
    • 参数解析
      • path:文件的绝对路径
  • BitmapFactory.decodeStream(InputStream is):从输入流加载图像;适用于从网络或其他输入流中加载图像

    InputStream inputStream = new FileInputStream("/sdcard/sample_image.png");
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
    
    • 参数解析
      • is:一个输入流对象,例如 FileInputStreamHttpURLConnection 的输入流
  • BitmapFactory.decodeByteArray(byte[] data, int offset, int length):从字节数组中加载图像。适用于已经有图像的字节数组

    byte[] imageData = ...; // 图像的字节数组
    Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
    
    • 参数解析

      • data:图像的字节数组

      • offset:开始读取字节偏移量

      • length:要读取字节数

BitmapFactory.Options 的使用

BitmapFactory.Options 是什么

  • BitmapFactory.Options 是一个辅助类,提供了一些选项控制解码过程,例如,是否只读取图像的宽高缩小图像尺寸以减少内存占用

示例:只解码图像的尺寸(宽高)

  • 有时只需要知道图像的宽高不需要加载整个图像到内存中,这时可以设置 inJustDecodeBoundstrue

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true; // 只解码图像的边界,不加载图像到内存
    BitmapFactory.decodeResource(getResources(), R.drawable.sample_image, options);
    
    int imageWidth = options.outWidth;
    int imageHeight = options.outHeight;
    
  • 这样做的好处节省内存资源。只获取图像大小信息不真正加载图像数据

示例:缩放图像

  • 解码图像时,可以通过设置 inSampleSize缩小图像inSampleSize 表示缩小的倍数

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 4; // 将图像的宽高缩小为原始的1/4
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image, options);
    
  • 效果减小了加载到内存中Bitmap 大小,这对显示缩略图或者在内存有限的设备上加载大图很有帮助

常见问题与注意事项

  • 内存消耗问题加载大图时,可能会导致内存不足异常(OutOfMemoryError)。通过使用 BitmapFactory.Options 的 inSampleSize缩小加载的图像大小,或使用 inJustDecodeBounds获取图像尺寸信息计算适合的缩放比例,可以有效减少内存消耗

  • 回收内存Bitmap 对象占用内存的,尤其是在加载大图更为明显。因此,在不再使用 Bitmap 对象时,应该调用 bitmap.recycle()释放内存资源(注意:这是在 Android 2.x 时代的做法,现代 Android 系统在垃圾回收机制上有所改进)

完整示例解析

  • 下面展示如何使用 BitmapFactory 加载缩放、并显示图像

    // 定义一个选项对象来缩放图像
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 2; // 缩小图像的宽高为原始的1/2
    
    // 从资源中解码图像
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image, options);
    
    // 在 ImageView 中显示图像
    ImageView imageView = findViewById(R.id.imageView);
    imageView.setImageBitmap(bitmap);
    

总结

  • BitmapFactory 是处理图像解码的主要工具。通过灵活地使用其提供的方法和选项,可以有效地控制图像加载和显示,特别是在优化内存使用和性能

标签:Options,BitmapFactory,图像,Bitmap,options,加载
From: https://www.cnblogs.com/ajunjava/p/18394667

相关文章

  • 【C#】Bitmap图像实现背景透明
    ///<summary>///背景透明化///</summary>///<paramname="img">原图</param>///<returns></returns>publicstaticBitmapConverImageBackTransparent(Bitmapimg){Bitmapbg=newBitmap(img.Width,img.Height);......
  • 聊一聊 C# 中让人惶恐的 Bitmap
    一:背景1.讲故事在.NET高级调试的旅程中,我常常会与Bitmap短兵相接,它最大的一个危害就是会让程序抛出匪夷所思的OutOfMemoryException,也常常会让一些.NET开发者们陷入其中不能自拔,痛不欲生,基于此,这一篇我从dump分析的角度给大家深挖一下Bitmap背后的故事。二:Bitmap背后的......
  • Android开发 - BleConnectOptions 类设置蓝牙连接选项解析
    BleConnectOptions是什么BleConnectOptions类是与蓝牙设备连接相关的一个配置类。它主要用于设置蓝牙连接的选项,确保与蓝牙设备的连接能够根据需求进行调整和优化。常用于配置蓝牙设备的连接参数,例如连接超时时间、是否自动连接等。这些配置可以帮助你更好地控制蓝牙连接过程,......
  • C#:Bitmap类使用方法—第1讲
    首先看一下Bitmap定义:封装GDI+位图,此位图由图形图像及其属性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。下面介绍一下使用的例子:Bitmapimage1;privatevoidButton1_Click(System.Objectsender,System.EventArgse){  try  {  ......
  • LeetCode 1359. Count All Valid Pickup and Delivery Options
    原题链接在这里:https://leetcode.com/problems/count-all-valid-pickup-and-delivery-options/description/题目:Given n orders,eachorderconsistsofapickupandadeliveryservice.Countallvalidpickup/deliverypossiblesequencessuchthatdelivery(i)isalw......
  • 深入解析Node.js中的fs.watch:options与listener详解
    在Node.js中,fs.watch方法是一个功能强大的文件系统监控工具,它允许我们对文件或目录进行实时监控,并在文件或目录发生变化时触发相应的操作。在使用fs.watch时,两个关键的部分是options对象和listener回调函数。本文将详细讲解这两个部分,帮助读者更好地理解和使用fs.watch。一......
  • OFtutorial02_commandLineArgumentsAndOptions
    OFtutorial2.CargList类如图包含很多函数,常用的addNote(输出字符串),noParallel(去掉基类中的并行选项),addBoolOption,addOption(增加选项)源码#include"fvCFD.H"#argc即argumentcount的缩写,保存程序运行时传递给主函数的参数个数;argv即argumentvector的缩写,保存程序运行......
  • c# svg转Bitmap Bitmap转ImageSource
    需要安装nuget包【svg】publicclassSVGHelper{publicstaticImageSourceConvertSvgToDrawingImage(stringpath){varsvgContent=File.ReadAllText(path);//使用SvgDocument解析SVG内容SvgDocumentsvgDoc......
  • ftrace的trace_options
    ftrace中的trace_options选项用于控制追踪数据的收集和显示方式。你可以通过/sys/kernel/debug/tracing/trace_options文件来设置这些选项。每个选项代表了不同的追踪行为或输出格式。以下是一些常见的trace_options选项及其含义:overwrite:含义:当启用此选项时,如果缓冲......
  • WPF WriteableBitmap通过GDI+绘制帮助类
    代码:publicclassWriteableBitmapGraphic:IDisposable{publicWriteableBitmapSource{get;privateset;}publicSystem.Drawing.Bitmapbitmap{get;privateset;}publicintDataLength{get;privateset;}publ......