Bitmap API

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)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容