前言html
本章內容android.graphics.Bitmap章節,譯爲"位圖",版本爲Android 4.0 r1,翻譯來自:"StreamH",歡迎訪問他的博客:"http://blog.csdn.net/qs_csu",再次感謝"StreamH" !期待你一塊兒參與翻譯Android的相關資料,聯繫我over140@gmail.com。java
聲明android
歡迎轉載,但請保留文章原始出處:) canvas
博客園:http://www.cnblogs.com/數組
Android中文翻譯組:http://androidbox.sinaapp.com/緩存
Bitmapapp
譯者署名:StreamHide
譯者連接:http://blog.csdn.net/qs_csu 學習
版本:Android 4.0 r1優化
結構
繼承關係
public class Bitmap extends Object implements Parcelable
java.lang.Object
android.graphics.Bitmap
內部類
詳細說明位圖的壓縮格式
enum Bitmap.Config
位圖的結構
常量
Int DENSITY_NONE
標誌着該位圖是以未知的像素密度建立的
參見
getDensity()
setDensity(int)
公共方法
boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream)
把位圖的壓縮信息寫入到一個指定的輸出流中。若是返回true,能夠經過傳遞一個相應的輸出流到BitmapFactory.decodeStream()來重構該位圖。注意:並不是全部的格式都直接支持位圖結構,因此經過BitmapFactory返回的位圖極可能有不一樣的位深度,或許會丟失每一個象素的alpha值(例如,JPEG 只支持不透明像素)。
(譯者注:色深(color depth),也稱色位深度(bitdePth),是指在必定分辨率下一個像素可以接受的顏色數量範圍。一般,色深用2的n次方來表示。例如,8 bit的色深包含2的8次方)
參數
format 圖像的壓縮格式;
quality 圖像壓縮比的值,0-100。 0 意味着小尺寸壓縮,100意味着高質量壓縮。對於有些格式,好比無損壓縮的PNG,它就會忽視quality這個參數設置。
stream 寫入壓縮數據的輸出流
返回值
若是成功地把壓縮數據寫入輸出流,則返回true。
public Bitmap copy (Bitmap.Config config, boolean isMutable)
根據該位圖的大小產生一個新位圖,根據指定的結構設置新位圖的結構,而後把位圖的像素拷貝到新位圖中。若是不支持該轉換,或者分配內存失敗,那就返回NULL。返回的位圖和原圖有一樣的像素密度。
參數
config 結果圖預期的結構;
isMutable 若是是true,那麼產生的圖片是可變的。(好比,它的像素能被修改)
返回值
新的位圖。若是拷貝操做不能執行,則返回NULL。
public void copyPixelsFromBuffer (Buffer src)
從緩存器中拷貝像素值,從當前索引開始,覆蓋位圖中對應的像素值。在緩存器中的數據不會被改變(不像setPixels(),會把32位去預存像素轉換爲該位圖的格式)。
public void copyPixelsToBuffer (Buffer dst)
把該位圖的像素值拷貝到指定的緩存器中(調用者分配的緩存器)。若是緩存區不夠大而沒法放置全部的像素值(要考慮每一個像素值的位數),或者若是該緩存器的子類不是被支持的類型中的一種(ByteBuffer,ShortBuffer,IntBuffer),那麼將會拋出一個異常。
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
返回一個不可改變的位圖,該位圖來自源位圖的子集,並根據可選的矩陣進行轉換。它被初始化爲跟源位圖有一樣的密度。
參數
source 產生子位圖的源位圖;
x 子位圖第一個像素在源位圖的X座標
y 子位圖第一個像素在源位圖的y座標
width 子位圖每一行的像素個數
height 子位圖的行數
m 對像素值進行變換的可選矩陣
filter 若是爲true,源圖要被過濾。該參數僅在matrix包含了超過一個翻轉纔有效
返回值
一個描述了源圖指定子集的位圖。
異常
IllegalArgumentException 若是x,y,width,height的值超出了源圖的維度,該異常會被拋出。
public static Bitmap createBitmap (int width, int height, Bitmap.Config config)
返回一個指定高度和寬度的不可改變的位圖。它的初始密度由getDensity()決定。
參數
width 位圖的寬度
height 位圖的高度
config 位圖的結構
異常
IllegalArgumentException 若是高度或寬度小於等於零,該異常被拋出。
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height)
返回一個不可變的位圖,該位圖來自源圖指定的子集。新位圖可能跟源圖同一個對象,或者是源圖的一個拷貝。它被初始化爲源圖一樣的密度。
參數
source 用來構建子集的源位圖
x 子位圖第一個像素在源位圖的X座標
y 子位圖第一個像素在源位圖的y座標
width 子位圖每一行的像素個數
height 子位圖的行數
public static Bitmap createBitmap (int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
返回一個指定寬度和高度的不可變位圖,該位圖每一個像素值等於顏色數組中對應的值。它初始化的密度由getDensity()來設定。
參數
colors 用來初始化像素值得顏色數組
offset 在像素數組的第一個顏色值以前要忽略的像素個數
stride 行之間像素個數
width 位圖的寬度
height 位圖的高度
config 位圖的結構。若是這個結構不支持每一個像素的alpha通道(好比,RGB_565), 那麼colors數組中的alpha位將被忽略(被假定爲FF值)。
異常
IllegalArgumentException 若是寬度值或高度值小於等於零,或者像素數組的長度小於像素個數,該異常被拋出。
public static Bitmap createBitmap (Bitmap src)
根據源位圖返回一個不可改變的位圖。新位圖可能跟源位圖是同一個對象,或者是一個拷貝。新位圖被初始化爲和源位圖有一樣的像素密度。
public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config config)
返回一個寬度和高度被指定的不可改變的位圖,且該位圖每個像素值由顏色數組中對應的值來設定。它的初始像素密度由getDensity()決定。
參數
colors 用來初始化像素值得顏色數組。該數組必須至少和寬度*高度同樣大。 width 位圖的寬度
height 位圖的高度
config 位圖的結構。若是這個結構不支持每一個像素的alpha通道(好比,RGB_565), 那麼colors數組中的alpha位將被忽略(被假定爲FF值)。
異常
IllegalArgumentException 若是寬度值或高度值小於等於零,或者像素數組的長度小於像素個數,該異常被拋出。
public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
從當前存在的位圖,按必定的比例建立一個新的位圖。
參數
src 用來構建子集的源位圖
dstWidth 新位圖指望的寬度
dstHeight 新位圖指望的高度
返回值
一個新的按比例變化的位圖。
public int describeContents ()
沒有特殊的包內容。(原文:No special parcel contents.)
返回值
一個位掩碼,指明被Parcelable序列化的特殊對象類型的數據集。
public void eraseColor (int c)
用指定的顏色填充位圖的像素值。
異常
IilegalStateException 當該位圖不可改變時
public Bitmap extractAlpha ()
返回一個新的位圖,該位圖從源圖中捕獲了alpha值。這個方法可能跟Canvas.drawBitmap()一塊兒被畫,顏色值從傳遞過來的畫布中獲取。
返回值
一個包含源位圖alpha通道值的位圖。
public Bitmap extractAlpha (Paint paint, int[] offsetXY)
返回一個從源圖中獲取了alpha值的新位圖。這些值可能被可選的畫布參數所影響,該畫布參數能夠包含它本身的alpha值,或可能包含一個能改變結果位圖實際尺寸的遮罩濾鏡(好比,一個模糊濾鏡能夠放大結果位圖)。若是offsetXY不爲空,它會返回最終位圖的偏移量總數,這樣它就能跟源位圖對齊。好比,若是畫布包含半徑爲2的模糊區,那麼offsetXY[] 將包含-2,-2,因此位圖的alpha值會按照(-2,-2)的偏移量去繪製,而後畫源圖時會致使模糊區域在視覺上跟源圖對齊。
返回位圖的初始像素密度跟源圖同樣。
參數
paint 可選的畫布,用來修改被返回位圖的alpha值。默認爲空值。
offsetXY 可選的數組,它返回x(索引爲0) 和y (索引爲1)的偏移量,該偏移量被用來定位返回的位圖,這樣它纔會在視覺上跟源位圖對齊。
返回值
返回一個新的位圖,該位圖從源圖中捕獲了alpha值。這個方法可能跟Canvas.drawBitmap()一塊兒被畫,顏色值從傳遞過來的畫布中獲取。
public final Bitmap.Config getConfig ()
若是這個位圖內在的配置是一種公開的格式,那麼返回這個配置,不然返回空值。
public int getDensity ()
返回位圖的像素密度。
默認的像素密度和當前的顯示密度同樣,除非當前的應用程序不支持不一樣的屏幕密度,當它是DENSITY_DEFAULT時。要注意到兼容模式是由最初裝載到進程的應用程序決定的。
--共享同一個進程的應用程序必須有一樣的兼容性,或者確保它們能明確地設置合適的位圖密度。
返回值
一個默認密度的變換因子,當變換因子未知時返回DENSITY_NONE值。
參見
public final int getHeight ()
返回位圖的高度值。
public byte[] getNinePatchChunk ()
返回一個裝有私有數據的可選數組,該數組被UI系統在一些位圖中使用。該方法不要在應用程序主動調用。
public int getPixel (int x, int y)
返回指定位置的像素顏色值。若是x或y越界(負數,或各自大於等於寬度或高度值),講拋出一個異常。
參數
x 待返回像素的x座標值(0-width-1)。
y 待返回像素的y座標值(0-height-1)
返回值
指定座標的argb顏色值。
異常
若是x,y越界,IilegalArgumentExcepiton將被拋出。
public void getPixels (int[] pixels, int offset, int stride, int x, int y, int width, int height)
把位圖的數據拷貝到pixels[]中。每個都由一個表示顏色值的int值來表示。幅度參數代表調用者容許的像素數組行間距。對一般的填充結果,只要傳遞寬度值給幅度參數。
參數
pixels 接收位圖顏色值的數組
offset 寫入到pixels[]中的第一個像素索引值
stride pixels[]中的行間距個數值(必須大於等於位圖寬度)。不能爲負數
x 從位圖中讀取的第一個像素的x座標值。
y 從位圖中讀取的第一個像素的y座標值
width 從每一行中讀取的像素寬度
height 讀取的行數
異常
IilegalArgumentExcepiton 若是x,y,width,height越界或stride的絕對值小於位圖寬度時將被拋出。
ArrayIndexOutOfBoundsException 若是像素數組過小而沒法接收指定書目的像素值時將被拋出。
public final int getRowBytes ()
返回位圖每行像素總數的字節數。要注意,這裏說的是位圖中原始態存儲的像素。若是你調用了getPixels()或者setPixels(),那麼像素就會統一地被處理成32bit值,它是根據顏色類進行填充的。
返回值
原生態位圖每行像素的字節總數。
public int getScaledHeight (int targetDensity)
一個方便的方法,它能返回被像素密度因子整除後的位圖高度值。
參數
targetDensity 位圖目標畫布的密度
返回值
根據密度比例因子處理後位圖的高度值。
public int getScaledHeight (DisplayMetrics metrics)
方便地以DisplayMetrics的目標密度值調用getScaledHeight(int)
public int getScaledHeight (Canvas canvas)
方便地以Canvas的目標密度值調用getScaledHeight(int)
public int getScaledWidth (DisplayMetrics metrics)
方便地以DisplayMetrics的目標密度值調用getScaledWidth(int)
public int getScaledWidth (int targetDensity)
一個方便的方法,它能返回被像素密度因子整除後的位圖寬度值。
參數
targetDensity 位圖目標畫布的密度
返回值
根據密度比例因子處理後位圖的寬度值。
public int getScaledWidth (Canvas canvas)
方便地以Canvas的目標密度值調用getScaledWidth (int)
public final int getWidth ()
返回位圖的寬度。
public final boolean hasAlpha ()
返回true,若是位圖的配置支持每一個像素的alpha值,而且這些像素可能包含不透明的alpha值。對於某些配置,通常都返回false(好比,RGB_565),由於它們不支持每一個像素的alpha值。儘管如此,對配置來講,這些位圖可能被標記爲它全部的像素都是透明的。在這種狀況下,hasAlpha()將會返回false。若是一個配置,好比ARGB_8888是沒有被標記的,那麼它會默認返回true。
public final boolean isMutable ()
若是該位圖被標記爲可改變(好比,能被畫進去),那麼返回true。
public final boolean isRecycled ()
若是該位圖已經被回收,返回true。若是那樣,若試圖獲取它的像素值,一個錯誤將會發生,而且該位圖不會被畫。
返回值
若是位圖已經被回收,返回true。
public void prepareToDraw ()
重建全部與待畫位圖相關的緩存。在位圖可清除的狀況下,這個調用會努力保證像素已經被解碼。若是這個方法是被有多個位圖的序列調用,優先級在LRU順序中提供(好比,最後被調用的位圖擁有最高的優先級)。對於和緩存無關的位圖,這個調用時一個no-op,它是無害的。
public void recycle ()
釋放和位圖相關的本地對象,且清除對像素數據的引用。該方法不會同步釋放像素數據。它僅僅容許在沒有其它引用的狀況下被系統垃圾回收。這個位圖被標記爲「死的」,意味着若是getPixels()或setPixels()被調用,一個異常會拋出,且它不畫任何東西。這個操做不可翻轉,因此只有當你確信這個位圖沒有更多的用處時,它才能被調用。這是一個高級的調用, 且通常來講它不須要被調用,由於一般的垃圾回收過程會在該位圖沒有其它引用的時候,釋放這些內存。
public void setDensity (int density)
指定位圖的密度。當位圖被畫到一個有密度的畫布上時,它會縮放到合適的比例
參數
density 該位圖的密度縮放因子。若是密度未知,值爲DENSITY_NONE。
參見
public void setPixel (int x, int y, int color)
把指定的顏色寫入到位圖中x,y的座標值的位置(假設該位圖是可變的)。
參數
X 待替換像素的x座標(0到width-1)。
Y 待替換像素的y座標(0到height-1)
color 寫入到位圖的顏色值
拋出
IilegalStateException 若是這個位圖不可改變
IIlegalArgumentException 若是x,y的值超出位圖的邊界
public void setPixels (int[] pixels, int offset, int stride, int x, int y, int width, int height)
用數組中的顏色值替換位圖的像素值。數組中的每一個元素是包裝的整型,表明了顏色值。
參數
pixels 寫到位圖中的顏色值
offset 從pixels[]中讀取的第一個顏色值的索引
stride 位圖行之間跳過的顏色個數。一般這個值等於位圖寬度,但它能夠更更大(或負數)
X 被寫入位圖中第一個像素的x座標。
Y 被寫入位圖中第一個像素的y座標
width 從pixels[]中拷貝的每行的顏色個數
height 寫入到位圖中的行數
異常
IilegalStateException 若是這個位圖不可改變
IIlegalArgumentException 若是x,y,width,height的值超出位圖的邊界
ArrayIndexOutOfBoundsException 若是像素隊列過小以至不能接受指定的像素位數。
public void writeToParcel (Parcel p, int flags)
把位圖和它的像素值寫入到parcel中。位圖能夠經過調用CREATOR.createFromParcel()進行重建。
參數
p 能夠寫入位圖數據的parcel對象
flages 附加的標記,代表這個對象以什麼方式寫入。多是0或PARCELABLE_WRITE_RETURN_VALUE
補充
文章精選