Android中图片处理之Bitmap

目录

1、BitMap 的基本概述

2、创建BitMap

 1、通过Bitmap.createBitmap()方法创建BitMap。

  2、通过BitmapFactory创建BitMap。

       1、创建bitmap

    2、BitmapFactory.Options的属性解析

3、BitMap的常用处理方式

1、BitMap的压缩

  2、BitMap的Bitmap.Config属性:

  3. BitMap的压缩格式

4、BitMap的内存优化

5、BitMap的其他相关操作


1、BitMap 的基本概述

1、 BitMap 即位图,图片在内存中的表达方式。由bit(位)map- (key-value)的方式读取像素。

2、Bitmap 用于图片的处理,实现了Parcelable接口(序列化) ,在Android中对图片的操作,大量用到bitmap

3、BitmapFactory:创建bitmap的辅助类。

4、BitMap 读取到内存中会占用很大的内存:可以通过图片的高宽来计算占用的内存:

图片的占用内存 = 图片的长度 * 图片的宽度 * 单位像素所占字节数(例如 ARGB_8888,这个模式下,一个像素点占用 4Byte)。

注意:如果读取的图片是从资源文件夹里面读取的话:

图片的占用内存 = 图片的长度 *图片的宽度* (inTargetDensity / inDensity)* 单位像素所占字节数(例如 ARGB_8888,这个模式下,一个像素点占用 4Byte)

以上可以看出 bitMap所占用的内存只跟图片的长宽和手机的逻辑密度有关,即 bitmap进行质量压缩后并不改变 bitmap占用内存的大小。

 

 

2、创建BitMap

 1、通过Bitmap.createBitmap()方法创建BitMap。

            Bitmap 的构造方法是受保护的,所以创建BitMap需要Bitmap.createBitmap()方法

            

创建Bitmap方法相关方法:
1、Bitmap createBitmap (Bitmap src)
从源位图中返回一个不可变的源位图,新的位图可能和源位图相同,或者是源位图的一个副本


2、 Bitmap createBitmap (int width, int height, Bitmap.Config config)
返回一个指定了高宽的,可变的位图。(创建了一个有指定高宽的空位图)
int width    位图的宽
int height   位图的高
config        位图的压缩格式(默认三种)


3、 Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
从指定的源位图的子集返回一个位图,新的位图可能与源相同的对象,或可能是一个副本。初始化与原始位图相同的密度。
(从原始位图剪切图像,可以用Matrix(矩阵)来实现旋转等高级方式截图)

source   bitmap产生子位图的源位图;
x int         子位图第一个像素在源位图的X坐标
y int          子位图第一个像素在源位图的y坐标
width int     子位图行的像素点个数
height int    子位图列的像素点个数
m  Matrix     对像素值进行变换的可选矩阵
filter boolean    如果为true,源图要被过滤。该参数仅在matrix包含不仅仅是翻转才起效
Returns Bitmap      一个描述了源图指定子集的位图


4、 public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config config) 

返回一个指定了高宽的不变的位图,颜色的像素值设置为相应的值的数组colors.

colors   int[]    用来初始化像素。这个数组的长度必须>=width*height
(此函数指定了眼色数组,指定了高宽来创建的位图)
 config        位图的压缩格式(默认三种)


5、 public static Bitmap createBitmap (int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
offset     colors中颜色值的偏移量,(即跳过前offset的颜色值)
stride     颜色数组之间的间距 (值 must be >=width or <= -width)

(1-5的初始密度由getDensity()决定)

 

6、public static Bitmap createBitmap(DisplayMetrics display, int[] colors, int offset, int stride, int width, int height, Config config)

与5比较多了一个参数 DisplayMetrics ,指定了它的初始密度由DisplayMetrics决定

 

  2、通过BitmapFactory创建BitMap。

       1、创建bitmap

     BitmapFactory是创建BitMap的工厂类,BitmapFactory提供了四类方法:decodeFile、decodeResource、decodeStream、        decodeByteArray  加载位图

     1、 从文件中获取BitMap:

通过文件流获取BitMap:

 try {
    FileInputStream in = new FileInputStream("/sdcard/Download/test.png");
} catch (FileNotFoundException e) {
    e.printStackTrace();

Bitmap bitmap = BitmapFactory.decodeStream(in);

//-------------------------------------------------------------------------

通过文件路径获取BitMap:

String 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android,可以使用多种方式来读取图片并生成Bitmap对象。以下是几种常见的方法: 1. 使用文件流方式读取图片: ``` FileInputStream fis = new FileInputStream("/sdcard/test.png"); Bitmap bitmap = BitmapFactory.decodeStream(fis); ``` 2. 使用R文件方式读取图片: ``` Bitmap bitmap = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.test); ``` 3. 使用ResourceStream方式读取图片,但不使用R文件: ``` Bitmap bitmap = BitmapFactory.decodeStream(getClass().getResourceAsStream("/res/drawable/test.png")); ``` 在读取图片时,还可以通过设置BitmapFactory.Options来进行一些优化操作。例如,可以设置inSampleSize来减小图片的宽高,从而减少内存占用: ``` BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; // 图片宽高都为原来的二分之一,即图片为原来的四分之一 Bitmap bitmap = BitmapFactory.decodeStream(fis, null, options); ``` 需要注意的是,以上方法的路径或资源ID需要根据实际情况进行修改。此外,在使用ImageView显示Bitmap时,可以通过开启视图缓存的方式来获取缓存的Bitmap对象: ``` imageView.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache()); imageView.setDrawingCacheEnabled(false); ``` 最后,根据需要对获取到的Bitmap对象进行进一步的处理,例如模糊处理等。 #### 引用[.reference_title] - *1* [安卓Bitmap读取图片](https://blog.csdn.net/zbuger/article/details/46895335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android从ImageView取出图片bitmap注意事项](https://blog.csdn.net/u013933272/article/details/50987092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android学习 | 10.使用位图工具Bitmap在存储卡上读写图片文件](https://blog.csdn.net/M_Nobody/article/details/126141636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值