Androidgraphics值Bitmap-創(chuàng)新互聯(lián)

Android graphics之Bitmap

#本文以Android api 22為基準(zhǔn)

創(chuàng)新互聯(lián)是一家專業(yè)提供盧龍企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、網(wǎng)站建設(shè)H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為盧龍眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

在android.graphics.PixelFormat中定義了如下幾種(不含deprecated的)RGB格式:

名稱

含義

RGBA_8888

1

透明通道和三個顏色通道都是8,可表達(dá)的色彩值最廣,這是使用最廣泛的格式

RGBX_8888

2

與RGBA_8888類似不過,透明通道的值永遠(yuǎn)為255

RGB_888

3

只有三個顏色通道,存儲空間相對前兩個較小。

Bitmap代表了解碼后圖片,可用于直接的繪制,Bitmap與一個native層的bitmap對應(yīng),使用完后,需要調(diào)用recyle函數(shù)回收native內(nèi)存。

android.graphics.Bitmap類代表了java層可繪制實體的最后一步。從一整個頁面,到某個view,在到drawable,最后都會匯集到Bitmap。

對于任何一個view來說,在onDraw()回調(diào)中,canvas都已經(jīng)與一個bitmap綁定。

Bitmap類提供了對像素點操作的一些基本接口。

對于開發(fā)者來說,關(guān)于Bitmap需要的做得事情有,創(chuàng)建Bitmap,操作像素,壓縮存儲,序列化/反序列化等。

需要自己創(chuàng)建Bitmap時,有兩種情況,一種是全新創(chuàng)建,另外一種是加載已有的圖片。

對于第一種,可使用Bitmap.createBitmap(...)函數(shù)創(chuàng)建,然后使用Bitmap類的像素操作接口填充像素,或者結(jié)合Canvas進(jìn)行更高級的繪制。

對于后一種,圖片的來源無非是這幾種:network,drawableX目錄,assets目錄,raw目錄,本地持久化存儲。所有的這些圖片都可以通過android.graphics.BitmapFactory工具類加載,解碼并創(chuàng)建為Bitmap。具體如下:

來源于本地存儲

BitmapFactory.decodeFile(String, Options)或者BitmapFactory.decodeFile(String)

來源于drawableX的純圖片

BitmapDrawable drawable = (BitmapDrawable) context.getDrawable(int picResId); // 注意這里的picResId必須指向一個純圖片Bitmap bitmap = drawable.getBitmap();

來源于一般的drawable

Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), config);Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, w, h);drawable.draw(canvas);

來源于assets

假如圖片路徑為:/assets/img/asset_img.pngBitmap bitmap = BitmapFactory.decodeStream(context.getResources().getAssets().open(“img/asset_img.png"))

來源于raw

Bitmap bitmap = BitmapFactory.decodeStream(context.getResources().openRawResource(R.raw.raw_img))

操作像素

對于像素的操作可以通過Bitmap類自己提供的一些基本的操作接口,也可以通過canvas進(jìn)行。后者提供了很多人性化的繪制方法,并且可以與很多android graphics框架中許多圖形特效類結(jié)合使用,繪制出更加出彩的內(nèi)容。這里只談前者,后者會在其他文章中繼續(xù)討論。

getPixel(int x, int y)

獲取指定位置的像素色彩值

getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)

一次獲取多個像素點,如果要獲取多個像素,調(diào)用此方法比循環(huán)的調(diào)用getPixel()效率要高

setPixel(int x, int y)

設(shè)置指定位置的一個像素

setPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)

批量設(shè)置像素,對于同時設(shè)置多像素來說,該方法比循環(huán)調(diào)用setPixel()效率要高

copyPixelsToBuffer(Buffer dst)

復(fù)制整個圖片像素到一個buffer

copyPixelsFromBuffer(Buffer src)

用一個buffer中的像素覆蓋當(dāng)前bitmap中的像素

setPixels()和getPixels()參數(shù)中的stride代表了參數(shù)pixels一行的長度,我們可以把這兩個方法看作是一個像素矩陣向另外一個像素矩陣投射的過程,兩個矩陣可能大小不同。不管是setPixels()還是getPixels(),當(dāng)位圖像素的讀取或設(shè)置需要換行時,pixels數(shù)組也需要”換行”,這時后者的換行就需要以stride為基準(zhǔn)。這也是為甚stride要大于等于width的原因。具體可以看這篇文章:http://ranlic.iteye.com/blog/1313735

壓縮存儲

Bitmap.compress(CompressFormat format, int quality, OutputStream outStream),其中quality的值范圍是[0, 100],0代表最低的質(zhì)量大的壓縮。

序列化與反序列化

Bitmap實現(xiàn)了Parcelable接口,如果是用intnet進(jìn)行數(shù)據(jù)傳遞,可以直接放到extra中。

如果是通過網(wǎng)絡(luò)傳輸(這里不考慮需求的合理性,因為實際中很少有直接通過網(wǎng)絡(luò)傳輸位圖的,都是傳輸壓縮后的圖片),則需要調(diào)用copyPixelsToBuffer()。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前名稱:Androidgraphics值Bitmap-創(chuàng)新互聯(lián)
標(biāo)題URL:http://m.kartarina.com/article40/ccgpeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司外貿(mào)網(wǎng)站建設(shè)軟件開發(fā)移動網(wǎng)站建設(shè)面包屑導(dǎo)航自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
主站蜘蛛池模板: 欧日韩国产无码专区| 亚洲精品无码国产片| 内射中出无码护士在线| 少妇极品熟妇人妻无码| 亚洲精品无码专区久久同性男| 一本无码中文字幕在线观| 亚洲中文无码永久免| 国产丝袜无码一区二区三区视频| 久久久久久国产精品免费无码| 色欲aⅴ亚洲情无码AV| 亚洲AV日韩AV永久无码色欲| 无码专区6080yy国产电影| 无码一区二区三区| 亚洲AV无码不卡在线观看下载| 蜜桃臀无码内射一区二区三区| 无码专区6080yy国产电影| 亚洲GV天堂无码男同在线观看| 伊人久久综合无码成人网| 日韩精品无码久久一区二区三 | 亚洲欧洲美洲无码精品VA| 精品国产V无码大片在线看| 无码精品A∨在线观看免费| 中文字幕乱偷无码AV先锋 | 久久久无码精品午夜| 国产丝袜无码一区二区视频| 亚洲AV无码乱码在线观看裸奔| 少妇仑乱A毛片无码| 在线看片无码永久免费视频| 亚洲va无码专区国产乱码| 国产99久久九九精品无码| 成人免费a级毛片无码网站入口| 久久人妻少妇嫩草AV无码专区| 亚洲精品无码久久久久| 中文字幕丰满乱子无码视频| 无码的免费不卡毛片视频| 国产精品白浆在线观看无码专区| 亚洲精品无码久久久久久| 亚洲乱亚洲乱妇无码| 免费看成人AA片无码视频羞羞网 | 国产av永久精品无码| 精品人妻系列无码人妻漫画|