?
? ????? PHP ??? ???? ??? ?? ??
Bitmap
版本:Android 4.0 r1
結(jié)構(gòu)
繼承關(guān)系
public class Bitmap extends Object implements Parcelable
java.lang.Object
android.graphics.Bitmap
內(nèi)部類
enum Bitmap.CompressFormat
詳細(xì)說明位圖的壓縮格式
enum Bitmap.Config
位圖的結(jié)構(gòu)
常量
Int DENSITY_NONE
標(biāo)志著該位圖是以未知的像素密度創(chuàng)建的
參見
getDensity()
setDensity(int)
公共方法
boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream)
把位圖的壓縮信息寫入到一個(gè)指定的輸出流中。如果返回true,可以通過傳遞一個(gè)相應(yīng)的輸出流到BitmapFactory.decodeStream()來重構(gòu)該位圖。注意:并非所有的格式都直接支持位圖結(jié)構(gòu),所以通過BitmapFactory返回的位圖很可能有不同的位深度,或許會丟失每個(gè)象素的alpha值(例如,JPEG 只支持不透明像素)。
(譯者注:色深(color depth),也稱色位深度(bitdePth),是指在一定分辨率下一個(gè)像素能夠接受的顏色數(shù)量范圍。通常,色深用2的n次方來表示。例如,8 bit的色深包含2的8次方)
參數(shù)
format 圖像的壓縮格式;
quality 圖像壓縮比的值,0-100。 0 意味著小尺寸壓縮,100意味著高質(zhì)量壓縮。對于有些格式,比如無損壓縮的PNG,它就會忽視quality這個(gè)參數(shù)設(shè)置。
stream 寫入壓縮數(shù)據(jù)的輸出流
返回值
如果成功地把壓縮數(shù)據(jù)寫入輸出流,則返回true。
public Bitmap copy (Bitmap.Config config, boolean isMutable)
根據(jù)該位圖的大小產(chǎn)生一個(gè)新位圖,根據(jù)指定的結(jié)構(gòu)設(shè)置新位圖的結(jié)構(gòu),然后把位圖的像素拷貝到新位圖中。如果不支持該轉(zhuǎn)換,或者分配內(nèi)存失敗,那就返回NULL。返回的位圖和原圖有同樣的像素密度。
參數(shù)
config 結(jié)果圖預(yù)期的結(jié)構(gòu);
isMutable 如果是true,那么產(chǎn)生的圖片是可變的。(比如,它的像素能被修改)
返回值
新的位圖。如果拷貝操作不能執(zhí)行,則返回NULL。
public void copyPixelsFromBuffer (Buffer src)
從緩存器中拷貝像素值,從當(dāng)前索引開始,覆蓋位圖中對應(yīng)的像素值。在緩存器中的數(shù)據(jù)不會被改變(不像setPixels(),會把32位去預(yù)存像素轉(zhuǎn)換為該位圖的格式)。
public void copyPixelsToBuffer (Buffer dst)
把該位圖的像素值拷貝到指定的緩存器中(調(diào)用者分配的緩存器)。如果緩存區(qū)不夠大而無法放置所有的像素值(要考慮每個(gè)像素值的位數(shù)),或者如果該緩存器的子類不是被支持的類型中的一種(ByteBuffer,ShortBuffer,IntBuffer),那么將會拋出一個(gè)異常。
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
返回一個(gè)不可改變的位圖,該位圖來自源位圖的子集,并根據(jù)可選的矩陣進(jìn)行轉(zhuǎn)換。它被初始化為跟源位圖有同樣的密度。
參數(shù)
source 產(chǎn)生子位圖的源位圖;
x 子位圖第一個(gè)像素在源位圖的X坐標(biāo)
y 子位圖第一個(gè)像素在源位圖的y坐標(biāo)
width 子位圖每一行的像素個(gè)數(shù)
height 子位圖的行數(shù)
m 對像素值進(jìn)行變換的可選矩陣
filter 如果為true,源圖要被過濾。該參數(shù)僅在matrix包含了超過一個(gè)翻轉(zhuǎn)才有效
返回值
一個(gè)描述了源圖指定子集的位圖。
異常
IllegalArgumentException 如果x,y,width,height的值超出了源圖的維度,該異常會被拋出。
public static Bitmap createBitmap (int width, int height, Bitmap.Config config)
返回一個(gè)指定高度和寬度的不可改變的位圖。它的初始密度由getDensity()決定。
參數(shù)
width 位圖的寬度
height 位圖的高度
config 位圖的結(jié)構(gòu)
異常
IllegalArgumentException 如果高度或?qū)挾刃∮诘扔诹悖摦惓1粧伋觥?/span>
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height)
返回一個(gè)不可變的位圖,該位圖來自源圖指定的子集。新位圖可能跟源圖同一個(gè)對象,或者是源圖的一個(gè)拷貝。它被初始化為源圖同樣的密度。
參數(shù)
source 用來構(gòu)建子集的源位圖
x 子位圖第一個(gè)像素在源位圖的X坐標(biāo)
y 子位圖第一個(gè)像素在源位圖的y坐標(biāo)
width 子位圖每一行的像素個(gè)數(shù)
height 子位圖的行數(shù)
public static Bitmap createBitmap (int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
返回一個(gè)指定寬度和高度的不可變位圖,該位圖每個(gè)像素值等于顏色數(shù)組中對應(yīng)的值。它初始化的密度由getDensity()來設(shè)定。
參數(shù)
colors 用來初始化像素值得顏色數(shù)組
offset 在像素?cái)?shù)組的第一個(gè)顏色值之前要忽略的像素個(gè)數(shù)
stride 行之間像素個(gè)數(shù)
width 位圖的寬度
height 位圖的高度
config 位圖的結(jié)構(gòu)。如果這個(gè)結(jié)構(gòu)不支持每個(gè)像素的alpha通道(比如,RGB_565), 那么colors數(shù)組中的alpha位將被忽略(被假定為FF值)。
異常
IllegalArgumentException,如果寬度值或高度值小于等于零,或者像素?cái)?shù)組的長度小于像素個(gè)數(shù),該異常被拋出。
public static Bitmap createBitmap (Bitmap src)
根據(jù)源位圖返回一個(gè)不可改變的位圖。新位圖可能跟源位圖是同一個(gè)對象,或者是一個(gè)拷貝。新位圖被初始化為和源位圖有同樣的像素密度。
public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config config)
返回一個(gè)寬度和高度被指定的不可改變的位圖,且該位圖每一個(gè)像素值由顏色數(shù)組中對應(yīng)的值來設(shè)定。它的初始像素密度由getDensity()決定。
參數(shù)
colors 用來初始化像素值得顏色數(shù)組。該數(shù)組必須至少和寬度*高度一樣大。 width 位圖的寬度
height 位圖的高度
config 位圖的結(jié)構(gòu)。如果這個(gè)結(jié)構(gòu)不支持每個(gè)像素的alpha通道(比如,RGB_565), 那么colors數(shù)組中的alpha位將被忽略(被假定為FF值)。
異常
IllegalArgumentException 如果寬度值或高度值小于等于零,或者像素?cái)?shù)組的長度小于像素個(gè)數(shù),該異常被拋出。
public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
從當(dāng)前存在的位圖,按一定的比例創(chuàng)建一個(gè)新的位圖。
參數(shù)
src 用來構(gòu)建子集的源位圖
dstWidth 新位圖期望的寬度
dstHeight 新位圖期望的高度
返回值
一個(gè)新的按比例變化的位圖。
public int describeContents ()
沒有特殊的包內(nèi)容。(原文:No special parcel contents.)
返回值
一個(gè)位掩碼,指明被Parcelable序列化的特殊對象類型的數(shù)據(jù)集。
public void eraseColor (int c)
用指定的顏色填充位圖的像素值。
異常
IilegalStateException 當(dāng)該位圖不可改變時(shí)
public Bitmap extractAlpha ()
返回一個(gè)新的位圖,該位圖從源圖中捕獲了alpha值。這個(gè)方法可能跟Canvas.drawBitmap()一起被畫,顏色值從傳遞過來的畫布中獲取。
返回值
一個(gè)包含源位圖alpha通道值的位圖。
public Bitmap extractAlpha (Paint paint, int[] offsetXY)
返回一個(gè)從源圖中獲取了alpha值的新位圖。這些值可能被可選的畫布參數(shù)所影響,該畫布參數(shù)可以包含它自己的alpha值,或可能包含一個(gè)能改變結(jié)果位圖實(shí)際尺寸的遮罩濾鏡(比如,一個(gè)模糊濾鏡可以放大結(jié)果位圖)。如果offsetXY不為空,它會返回最終位圖的偏移量總數(shù),這樣它就能跟源位圖對齊。比如,如果畫布包含半徑為2的模糊區(qū),那么offsetXY[] 將包含-2,-2,所以位圖的alpha值會按照(-2,-2)的偏移量去繪制,然后畫源圖時(shí)會導(dǎo)致模糊區(qū)域在視覺上跟源圖對齊。
返回位圖的初始像素密度跟源圖一樣。
參數(shù)
paint 可選的畫布,用來修改被返回位圖的alpha值。默認(rèn)為空值。
offsetXY 可選的數(shù)組,它返回x(索引為0) 和y (索引為1)的偏移量,該偏移量被用來定位返回的位圖,這樣它才會在視覺上跟源位圖對齊。
返回值
返回一個(gè)新的位圖,該位圖從源圖中捕獲了alpha值。這個(gè)方法可能跟Canvas.drawBitmap()一起被畫,顏色值從傳遞過來的畫布中獲取。
public final Bitmap.Config getConfig ()
如果這個(gè)位圖內(nèi)在的配置是一種公開的格式,那么返回這個(gè)配置,否則返回空值。
public int getDensity ()
返回位圖的像素密度。
默認(rèn)的像素密度和當(dāng)前的顯示密度一樣,除非當(dāng)前的應(yīng)用程序不支持不同的屏幕密度,當(dāng)它是DENSITY_DEFAULT時(shí)。要注意到兼容模式是由最初裝載到進(jìn)程的應(yīng)用程序決定的。
--共享同一個(gè)進(jìn)程的應(yīng)用程序必須有同樣的兼容性,或者確保它們能明確地設(shè)置合適的位圖密度。
返回值
一個(gè)默認(rèn)密度的變換因子,當(dāng)變換因子未知時(shí)返回DENSITY_NONE值。
參見
setDensity(int)
DENSITY_DEFAULT
densityDpi
DENSITY_NONE
public final int getHeight ()
返回位圖的高度值。
public byte[] getNinePatchChunk ()
返回一個(gè)裝有私有數(shù)據(jù)的可選數(shù)組,該數(shù)組被UI系統(tǒng)在一些位圖中使用。該方法不要在應(yīng)用程序主動(dòng)調(diào)用。
public int getPixel (int x, int y)
返回指定位置的像素顏色值。如果x或y越界(負(fù)數(shù),或各自大于等于寬度或高度值),講拋出一個(gè)異常。
參數(shù)
x 待返回像素的x坐標(biāo)值(0-width-1)。
y 待返回像素的y坐標(biāo)值(0-height-1)
返回值
指定坐標(biāo)的argb顏色值。
異常
如果x,y越界,IilegalArgumentExcepiton將被拋出。
public void getPixels (int[] pixels, int offset, int stride, int x, int y, int width, int height)
把位圖的數(shù)據(jù)拷貝到pixels[]中。每一個(gè)都由一個(gè)表示顏色值的int值來表示。幅度參數(shù)表明調(diào)用者允許的像素?cái)?shù)組行間距。對通常的填充結(jié)果,只要傳遞寬度值給幅度參數(shù)。
參數(shù)
pixels 接收位圖顏色值的數(shù)組
offset 寫入到pixels[]中的第一個(gè)像素索引值
stride pixels[]中的行間距個(gè)數(shù)值(必須大于等于位圖寬度)。不能為負(fù)數(shù)
x 從位圖中讀取的第一個(gè)像素的x坐標(biāo)值。
y 從位圖中讀取的第一個(gè)像素的y坐標(biāo)值
width 從每一行中讀取的像素寬度
height 讀取的行數(shù)
異常
IilegalArgumentExcepiton 如果x,y,width,height越界或stride的絕對值小于位圖寬度時(shí)將被拋出。
ArrayIndexOutOfBoundsException 如果像素?cái)?shù)組太小而無法接收指定書目的像素值時(shí)將被拋出。
public final int getRowBytes ()
返回位圖每行像素總數(shù)的字節(jié)數(shù)。要注意,這里說的是位圖中原始態(tài)存儲的像素。如果你調(diào)用了getPixels()或者setPixels(),那么像素就會統(tǒng)一地被處理成32bit值,它是根據(jù)顏色類進(jìn)行填充的。
返回值
原生態(tài)位圖每行像素的字節(jié)總數(shù)。
public int getScaledHeight (int targetDensity)
一個(gè)方便的方法,它能返回被像素密度因子整除后的位圖高度值。
參數(shù)
targetDensity 位圖目標(biāo)畫布的密度
返回值
根據(jù)密度比例因子處理后位圖的高度值。
public int getScaledHeight (DisplayMetrics metrics)
方便地以DisplayMetrics的目標(biāo)密度值調(diào)用getScaledHeight(int)
public int getScaledHeight (Canvas canvas)
方便地以Canvas的目標(biāo)密度值調(diào)用getScaledHeight(int)
public int getScaledWidth (DisplayMetrics metrics)
方便地以DisplayMetrics的目標(biāo)密度值調(diào)用getScaledWidth(int)
public int getScaledWidth (int targetDensity)
一個(gè)方便的方法,它能返回被像素密度因子整除后的位圖寬度值。
參數(shù)
targetDensity 位圖目標(biāo)畫布的密度
返回值
根據(jù)密度比例因子處理后位圖的寬度值。
public int getScaledWidth (Canvas canvas)
方便地以Canvas的目標(biāo)密度值調(diào)用getScaledWidth (int)
public final int getWidth ()
返回位圖的寬度。
public final boolean hasAlpha ()
返回true,如果位圖的配置支持每個(gè)像素的alpha值,并且這些像素可能包含不透明的alpha值。對于某些配置,一般都返回false(比如,RGB_565),因?yàn)樗鼈儾恢С置總€(gè)像素的alpha值。盡管如此,對配置來說,這些位圖可能被標(biāo)記為它所有的像素都是透明的。在這種情況下,hasAlpha()將會返回false。如果一個(gè)配置,比如ARGB_8888是沒有被標(biāo)記的,那么它會默認(rèn)返回true。
public final boolean isMutable ()
如果該位圖被標(biāo)記為可改變(比如,能被畫進(jìn)去),那么返回true。
public final boolean isRecycled ()
如果該位圖已經(jīng)被回收,返回true。如果那樣,若試圖獲取它的像素值,一個(gè)錯(cuò)誤將會發(fā)生,并且該位圖不會被畫。
返回值
如果位圖已經(jīng)被回收,返回true。
public void prepareToDraw ()
重建所有與待畫位圖相關(guān)的緩存。在位圖可清除的情況下,這個(gè)調(diào)用會努力保證像素已經(jīng)被解碼。如果這個(gè)方法是被有多個(gè)位圖的序列調(diào)用,優(yōu)先級在LRU順序中提供(比如,最后被調(diào)用的位圖擁有最高的優(yōu)先級)。對于和緩存無關(guān)的位圖,這個(gè)調(diào)用時(shí)一個(gè)no-op,它是無害的。
public void recycle ()
釋放和位圖相關(guān)的本地對象,且清除對像素?cái)?shù)據(jù)的引用。該方法不會同步釋放像素?cái)?shù)據(jù)。它僅僅允許在沒有其它引用的情況下被系統(tǒng)垃圾回收。這個(gè)位圖被標(biāo)記為“死的”,意味著如果getPixels()或setPixels()被調(diào)用,一個(gè)異常會拋出,且它不畫任何東西。這個(gè)操作不可翻轉(zhuǎn),所以只有當(dāng)你確信這個(gè)位圖沒有更多的用處時(shí),它才能被調(diào)用。這是一個(gè)高級的調(diào)用, 且一般來說它不需要被調(diào)用,因?yàn)橥ǔ5睦厥者^程會在該位圖沒有其它引用的時(shí)候,釋放這些內(nèi)存。
public void setDensity (int density)
指定位圖的密度。當(dāng)位圖被畫到一個(gè)有密度的畫布上時(shí),它會縮放到合適的比例
參數(shù)
density 該位圖的密度縮放因子。如果密度未知,值為DENSITY_NONE。
參見
getDensity()
DENSITY_DEFAULT
densityDpi
DENSITY_NONE
public void setPixel (int x, int y, int color)
把指定的顏色寫入到位圖中x,y的坐標(biāo)值的位置(假設(shè)該位圖是可變的)。
參數(shù)
X 待替換像素的x坐標(biāo)(0到width-1)。
Y 待替換像素的y坐標(biāo)(0到height-1)
color 寫入到位圖的顏色值
拋出
IilegalStateException 如果這個(gè)位圖不可改變
IIlegalArgumentException 如果x,y的值超出位圖的邊界
public void setPixels (int[] pixels, int offset, int stride, int x, int y, int width, int height)
用數(shù)組中的顏色值替換位圖的像素值。數(shù)組中的每個(gè)元素是包裝的整型,代表了顏色值。
參數(shù)
pixels 寫到位圖中的顏色值
offset 從pixels[]中讀取的第一個(gè)顏色值的索引
stride 位圖行之間跳過的顏色個(gè)數(shù)。通常這個(gè)值等于位圖寬度,但它可以更更大(或負(fù)數(shù))
X 被寫入位圖中第一個(gè)像素的x坐標(biāo)。
Y 被寫入位圖中第一個(gè)像素的y坐標(biāo)
width 從pixels[]中拷貝的每行的顏色個(gè)數(shù)
height 寫入到位圖中的行數(shù)
異常
IilegalStateException 如果這個(gè)位圖不可改變
IIlegalArgumentException 如果x,y,width,height的值超出位圖的邊界
ArrayIndexOutOfBoundsException 如果像素隊(duì)列太小以致不能接受指定的像素位數(shù)。
public void writeToParcel (Parcel p, int flags)
把位圖和它的像素值寫入到parcel中。位圖可以通過調(diào)用CREATOR.createFromParcel()進(jìn)行重建。
參數(shù)
p 可以寫入位圖數(shù)據(jù)的parcel對象
flages 附加的標(biāo)記,表明這個(gè)對象以什么方式寫入??赡苁?/span>0或PARCELABLE_WRITE_RETURN_VALUE
補(bǔ)充
文章精選
Android Bitmap和Canvas學(xué)習(xí)筆記
Android畫圖學(xué)習(xí)總結(jié)(二)--Bitmap
Android Bitmap內(nèi)存限制
Android Bitmap轉(zhuǎn)字節(jié)數(shù)組后大小問題
Android bitmap優(yōu)化