Bitmap API

1.简介

Bitmap是Android系统中的图像处理的最重要类之一,通过bitmap可以获得图片的基本信息,以及对图片进行一系列的操作

2.API

public boolean compress(CompressFormat format, int quality, OutputStream stream)

把位图的压缩信息写入到指定的输出流.如果返回true,位图可以通过适当的输入流重建到BitmapFactory.decodeStream().注:不是所有的格式都支持所有的位图结构,所以通过BitmapFactory返回的位图很可能有不同的位深度,可能会丢失每个像素的alpha值(例如,JPEG 只支持不透明像素)。format:图片压缩的格式 quality:图片压缩比值 0小尺寸压缩,100高质量压缩.像无损压缩PNG格式图片直接忽略这个参数 stream 写入压缩数据的输出流

public Bitmap copy(Config config, boolean isMutable)

尝试创建一个和原位图相同大小的新位图,设置新位图一个指定的配置,然后把这个位图的像素拷贝给新位图. 如果不支持该转换,或者分配内存失败,那就返回NULL. 返回的位图和原来的位图有相同的像素密度

public void copyPixelsFromBuffer(Buffer src)

从缓冲器中拷贝像素,从当前的位置开始,覆盖位图的像素,缓冲器中的数据不会改变(不像 setPixels(),32位非预存像素转化为本地位图格式)这种方式返回后,当前缓存模式会被更新:位置是从缓存元件读出的数目加1,如果需要从缓存从读位图必须重新读一次

public void copyPixelsToBuffer(Buffer dst)

把位图像素复制到特殊的缓存(调用者分配的缓存器)。缓存区不够大不能放下所有的像素(要考虑每 个像素值的位数)或者如果该缓存器的子类不是被支持的类型中的一种(ByteBuffer,ShortBuffer,IntBuffer),将会抛出一个异常。

位图的内容被复制到缓存中,这就意味着这个位图存储了它的预乘像素,这种方式返回后,当前缓存模式会被更新:位置是从缓存元件读出的数目加1,如果需要从缓存从读位图必须重新读一次

public static Bitmap createBitmap(Bitmap src)

根据源位图返回一个不可改变的位图。新位图可能跟源位图是同一个对象,或者是一个拷贝。新位图被初始化为和源位图有同样像素密度的位图。

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height)

返回一个不可变的位图,该位图来自源图指定的子集。新位图可能跟源位图是同一个对象,或者是源位图的一个拷贝。它被初始化为源图同样的密度。

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)

返回一个不可改变的位图,该位图来自源位图的子集,并根据可选的矩阵进行转换。它被初始化为跟源位图有同样的密度。

如果源位图是不可变的,需要的子集和源位图相同,然后返回源位图,没有新的位图生成

public static Bitmap createBitmap(int width, int height, Config config)

返回一个指定高度和宽度的不可改变的位图。它的初始密度由getDensity()决定。

###public static Bitmap createBitmap(DisplayMetrics display, int width,? int height, Config config)

返回一个指定高度和宽度的不可改变的位图。它的初始密度由DisplayMetrics决定。

###public static Bitmap createBitmap(int colors[], int offset, int stride,? int width, int height, Config config)

返回一个指定宽度和高度的不可变位图,该位图每个像素值等于颜色数组中对应的值。它初始化的密度由getDensity()决定。

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

返回一个指定宽度和高度的不可变位图,该位图每个像素值等于颜色数组中对应的值。它初始化的密度由DisplayMetrics决定。

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

返回一个指定宽度和高度的不可变位图,该位图每个像素值等于颜色数组中对应的值。它初始化的密度由getDensity()决定。

### public static Bitmap createBitmap(DisplayMetrics display, int colors[],? int width, int height, Config config)

返回一个指定宽度和高度的不可变位图,该位图每个像素值等于颜色数组中对应的值。它初始化的密度由DisplayMetrics决定。

###public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight,? boolean filter)

按当前存在的位图的比例创建一张新的位图. 如果特殊的位图与源位图当前的宽高相同,返回源位图,不创建新的位图

public int describeContents()

没有特殊的包内容

public void eraseColor(@ColorInt int c)

用指定的颜色填充位图的像素

public Bitmap extractAlpha()

返回一个从源图中获取了alpha值的新位图,位图可能被Canvas.drawBitmap()所画,颜色从draw中调用的paint中取到

public Bitmap extractAlpha(Paint paint, int[] offsetXY)

返回一个从源图中获取了alpha值的新位图。这些值可能被可选的画布参数所影响,该画布参数可以包含它自己的alpha值,或可能包含一个能改变结果位图实际尺寸的遮罩滤镜(比如,一个模糊滤镜可以放大结果位图)。如果offsetXY不为空,它会返回最终位图的偏移量总数,这样它就能跟源位图对齐。比如,如果画布包含半径为2的模糊区,那么offsetXY[] 将包含-2,-2,所以位图的alpha值会按照(-2,-2)的偏移量去绘制,然后画源图时会导致模糊区域在视觉上跟源图对齐。

返回位图的初始像素密度跟源图一样。

public final int getAllocationByteCount()

返回本地用去存储位图像素的内存大小

如果位图被更小解码位图重用了,getByteCount()的结果会更大,如果没有以这种形式修改,getByteCount()返回的结果与当前的位图大小相同

public final int getByteCount()

返回用于用于储存位图像素的最小位数

public final Config getConfig()

如果这个位图内在的配置是一种公开的格式,那么返回这个配置,否则返回空值

public int getDensity()

返回位图的像素密度

默认的像素密度和当前的显示密度一样,除非当前的应用程序不支持不同的屏幕密度,当它是DENSITY_DEFAULT时。要注意到兼容模式是由最初装载到进程的应用程序决定的

共享同一个进程的应用程序必须有同样的兼容性,或者确保它们能明确地设置合适的位图密度

public int getGenerationId()

返回位图的id,当位图被修改时,id会改变. 可以用于位图是否改变的一种高效的方式

public final int getHeight()

返回位图的高

public byte[] getNinePatchChunk()

返回一个装有私有数据的可选数组,该数组被UI系统在一些位图中使用。该方法不要在应用程序主动调用

public int getPixel(int x, int y)

返回指定位置的像素颜色值。如果x或y越界(负数,或各自大于等于宽度或高度值),抛出异常

返回的颜色是一个非预乘ARGB值

###public void getPixels(@ColorInt int[] pixels, int offset, int stride,? int x, int y, int width, int height)

把位图的数据拷贝到pixels[]中。每一个都由一个表示颜色值的int值来表示。幅度参数表明调用者允许的像素数组行间距。对通常的填充结果,只要传递宽度值给幅度参数

public final int getRowBytes()

把位图的数据拷贝到pixels[]中。每一个都由一个表示颜色值的int值来表示。幅度参数表明调用者允许的像素数组行间距。对通常的填充结果,只要传递宽度值给幅度参数

public int getScaledWidth(Canvas canvas)

方便地以Canvas的目标密度值调用getScaledWidth(int)

public int getScaledHeight(Canvas canvas)

方便地以Canvas的目标密度值调用getScaledHeight(int)

public int getScaledWidth(DisplayMetrics metrics)

方便地以DisplayMetrics的目标密度值调用getScaledWidth(int)

public int getScaledHeight(DisplayMetrics metrics)

方便地以DisplayMetrics的目标密度值调用getScaledHeight(int)

public int getScaledWidth(int targetDensity)

方便的返回被像素密度因子整除后的位图宽度值

public int getScaledHeight(int targetDensity)

方便的返回被像素密度因子整除后的位图高度值

public final int getWidth()

获取位图的宽

public final boolean hasAlpha()

如果位图的配置支持每个像素的alpha值,并且这些像素可能包含不透明的alpha值返回true

对于某些配置,一般都返回false(比如,RGB_565),因为它们不支持每个像素的alpha值。尽管如此,对配置来说,这些位图可能被标记为它所有的像素都是透明的。在这种情况下,hasAlpha()将会返回false。如果一个配置,比如ARGB_8888是没有被标记的,那么它会默认返回true。

public final boolean hasMipMap()

指示负责绘制该位图的渲染器是否应该在位图被缩小的时候使用贴纸

如果知道将会在低于50%的尺寸下绘制位图

public final boolean isMutable()

如果该位图被标记为可改变(比如,能被画进去),那么返回true

public final boolean isPremultiplied()

存储位图像素被设定为预乘. 当一个像素是预乘,RGB值通过alpha坐乘 例如,如果原来的颜色是红色(128,255,0,0)预乘的结果是(128,128,0,0)

RGB—565总会返回false

public final boolean isRecycled()

如果该位图已经被回收,返回true。如果那样,若试图获取它的像素值,一个错误将会发生,并且该位图不会被画

public void prepareToDraw()

重建所有与待画位图相关的缓存。在位图可清除的情况下,这个调用会努力保证像素已经被解码。如果这个方法是被有多个位图的序列调用,优先级在LRU顺序中提供(比如,最后被调用的位图拥有最高的优先级)。对于和缓存无关的位图,这个调用时一个no-op,它是无害的

public void reconfigure(int width, int height, Config config)

修改的位图有特殊宽高配置,不会影响位图的分配 位图像素数据不会被新的配置重复初始化

public void recycle()

释放与位图相关的本地对象,且清除对像素数据的引用。该方法不会同步释放像素数据。它仅仅允许在没有其它引用的情况下被系统垃圾回收。这个位图被标记为“死的”,意味着如果getPixels()或setPixels()被调用,一个异常会抛出,且它不画任何东西。这个操作不可翻转,所以只有当你确信这个位图没有更多的用处时,它才能被调用。这是一个高级的调用, 且一般来说它不需要被调用,因为通常的垃圾回收过程会在该位图没有其它引用的时候,释放这些内存。

public boolean sameAs(Bitmap other)

如果与位图的密度,配置,像素相同返回true,否则返回false

public void setDensity(int density)

指定位图的密度。当位图被画到一个有密度的画布上时,它会缩放到合适的比例

public void setHasAlpha(boolean hasAlpha)

设定位图是透明的或者位图中的一部分可能存在不透明的alphe值

注意:一些配置(RGB—565)可以被忽略,它不支持每个像素的alphe值

public final void setHasMipMap(boolean hasMipMap)

设置负责绘制该位图,指示它应该尝试使用贴图当此位图绘制缩小渲染器的提示

public void setHeight(int height)

设定像素高

public void setPixel(int x, int y, @ColorInt int color)

把指定的颜色写入到位图中x,y的坐标值的位置(假设该位图是可变的)

###public void setPixels(@ColorInt int[] pixels, int offset, int stride,? int x, int y, int width, int height)

用数组中的颜色值替换位图的像素值。数组中的每个元素是包装的整型,代表了颜色值

public final void setPremultiplied(boolean premultiplied)

设置位图是否应该把它的数据作为预乘

public void setWidth(int width)

设定像素的宽

public void writeToParcel(Parcel p, int flags)

用数组中的颜色值替换位图的像素值。数组中的每个元素是包装的整型,代表了颜色值

时间: 2024-08-24 18:43:31

Bitmap API的相关文章

Android(java)学习笔记236:多媒体之加载大图片到内存(Bitmap API)

1.Bitmap (API使用) android里面的bitmap中,一个像素点需要4个byte去表示,这是因为android表示颜色是" argb ":其中 a 表示是透明度,然后是" rgb" 颜色表示范围 00000000 ~~~ffffffff 2.加载图片到内存: 上面说到了图形表示使用4byte,和int一样,所以Android里面每个像素点都是使用一个int来表示的. Bitmap bitmap = BitmapFactory.decodeResour

基于Redis bitmap实现开关配置功能

作者:zhanhailiang 日期:2014-12-21 bitmap api SETBIT key offset value 对key所储存的字符串值,设置或清除指定偏移量上的位(bit). 位的设置或清除取决于value参数,可以是0也可以是1. 当key不存在时,自动生成一个新的字符串值. 字符串会进行伸展(grown)以确保它可以将value保存在指定的偏移量上. 当字符串值进行伸展时,空白位置以0填充. offset参数必须大于或等于0,小于2^32(bit映射被限制在512MB之内

APP性能优化系列:内存优化-bitmap详解

??在Android应用开发中,我们经常需要跟图片打交道,而图片一个很麻烦的问题是占用内存非常大,经常导致OOM,了解Bitmap相关信息,不同sdk版本中Android图片处理的变化,以及一些优化处理的方式对我们平时开发中对图片的会非常有帮助. ??在开始本节的内容之前我们.先来区分几个名词的概念: Drawable:通用的图形对象,用于装载常用格式的图像,既可以是PNG,JPG这样的图像, 也是前面学的那13种Drawable类型的可视化对象!我们可以理解成一个用来放画的--画框! Bitm

Android Bitmap 加载与像素操作

Android Bitmap 加载与像素操作 一:加载与像素读写 在Android SDK中,图像的像素读写可以通过getPixel与setPixel两个Bitmap的API实现.Bitmap API读取像素的代码如下: int pixel = bitmap.getPixel(col, row);// ARGB int red = Color.red(pixel); // same as (pixel >> 16) &0xff int green = Color.green(pixel

RxJava学习小结

什么是RxJava 1. 定义 RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences. RxJava是JVM的响应式扩展(ReactiveX),它是通过使用可观察的序列将异步和基于事件的程序组合起来的一个库. 2. 特点 (1)观察者模式 RxJava

Rx系列---响应式编程

Rx是ReactiveX的简称,翻译过来就是响应式编程 首先要先理清这么一个问题:Rxjava和我们平时写的程序有什么不同.相信稍微对Rxjava有点认知的朋友都会深深感受到用这种方式写的程序和我们一般写的程序有很明显的不同.我们一般写的程序 统称为命令式程序,是以流程为核心的,每一行代码实际上都是机器实际上要执行的指令.而Rxjava这样的编程风格,称为函数响应式编程.函数响应式编程是以数据流为核心,处理数据的输入,处理以及输出的.这种思路写出来的代码就会跟机器实际执行的指令大相径庭.所以对于

Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

标签: Android百度地图API Key  分类: Android 百度地图开发(2)  最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!   一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/a

Android异步加载全解析之Bitmap

Android异步加载全解析之Bitmap 在这篇文章中,我们分析了Android在对大图处理时的一些策略--Android异步加载全解析之大图处理  戳我戳我 那么在这篇中,我们来对图像--Bitmap进行一个更加细致的分析,掌握Bitmap的点点滴滴. 引入 Bitmap这玩意儿号称Android App头号杀手,特别是3.0之前的版本,简直就是皇帝般的存在,碰不得.摔不得.虽然后面的版本Android对Bitmap的管理也进行了一系列的优化,但是它依然是非常难处理的一个东西.在Androi

Android应用中使用百度地图API定位自己的位置(二)

官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发者们提供了如下类型的地图覆盖物: 我的位置图层(MyLocationOverlay):用于显示用户当前位置的图层(支持自定义位置图标): Poi搜索结果图层(PoiOverlay):用于显示兴趣点搜索结果的图层: 路线图层(RouteOverlay):公交.步行和驾车线路图层,将公交.步行和驾车出行方案的路线及关键点显示在地图上(起.终