Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Bitmap API

Bitmap API

編輯:關於Android編程

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)

用數組中的顏色值替換位圖的像素值。數組中的每個元素是包裝的整型,代表了顏色值

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved