【Android中文API】Bitmap

前言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.CompressFormat

  詳細說明位圖的壓縮格式

 

  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),是指在必定分辨率下一個像素可以接受的顏色數量範圍。一般,色深用2n次方來表示。例如,8 bit的色深包含28次方)

參數

                            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)

把該位圖的像素值拷貝到指定的緩存器中(調用者分配的緩存器)。若是緩存區不夠大而沒法放置全部的像素值(要考慮每一個像素值的位數),或者若是該緩存器的子類不是被支持的類型中的一種(ByteBufferShortBufferIntBuffer),那麼將會拋出一個異常。

 

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       若是xywidthheight的值超出了源圖的維度,該異常會被拋出。

 

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值。

           參見

           setDensity(int)

DENSITY_DEFAULT

densityDpi

DENSITY_NONE

 

public final int getHeight ()

返回位圖的高度值。

 

public byte[] getNinePatchChunk ()

返回一個裝有私有數據的可選數組,該數組被UI系統在一些位圖中使用。該方法不要在應用程序主動調用。

 

public int getPixel (int x, int y)

返回指定位置的像素顏色值。若是xy越界(負數,或各自大於等於寬度或高度值),講拋出一個異常。

參數

x        待返回像素的x座標值(0-width-1)

                 y        待返回像素的y座標值(0-height-1)

    返回值

                   指定座標的argb顏色值。

  異常

                   若是xy越界,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       若是xywidthheight越界或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

參見

      getDensity()

DENSITY_DEFAULT

densityDpi

DENSITY_NONE

 

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

把指定的顏色寫入到位圖中xy的座標值的位置(假設該位圖是可變的)

參數

X               待替換像素的x座標(0width-1)

Y               待替換像素的y座標(0height-1)

color         寫入到位圖的顏色值

拋出

         IilegalStateException                      若是這個位圖不可改變

IIlegalArgumentException   若是xy的值超出位圖的邊界

 

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   若是xywidthheight的值超出位圖的邊界

ArrayIndexOutOfBoundsException 若是像素隊列過小以至不能接受指定的像素位數。

 

public void writeToParcel (Parcel p, int flags)

把位圖和它的像素值寫入到parcel中。位圖能夠經過調用CREATOR.createFromParcel()進行重建。

參數

  p                能夠寫入位圖數據的parcel對象

flages       附加的標記,代表這個對象以什麼方式寫入。多是0PARCELABLE_WRITE_RETURN_VALUE

 

補充

         文章精選

                   Android BitmapCanvas學習筆記

                   Android畫圖學習總結(二)——Bitmap

                   Android Bitmap內存限制

                   Android Bitmap轉字節數組後大小問題

                   Android bitmap優化

相關文章
相關標籤/搜索