android基礎入門教程8.2.1bitmap位圖詳解_第1頁
android基礎入門教程8.2.1bitmap位圖詳解_第2頁
android基礎入門教程8.2.1bitmap位圖詳解_第3頁
android基礎入門教程8.2.1bitmap位圖詳解_第4頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、title: Android基礎入門categories: Android8.2.1 Bitmap(位圖)詳解基礎入門,Android基礎入門解8.2.1 Bitmap(位圖)詳本節(jié)引言:在上一節(jié)中對Android中的13種類型的Drawable的類型進行了講解,有沒有應用到自己的項目當中呢?而本節(jié)來探討的是Bitmap(位圖)的一些使用,而在開始本節(jié)的內(nèi)容之前先來區(qū)分幾個名詞的概念:Drawable:通用的圖形對象,用于裝載常用格式的圖像,既可以是PNG,JPG這樣的圖像,也是前面學的那13種Drawable類型的可視化對象!可以理解成一個用來放畫的畫框!Bitmap(位圖):可以把他看作一

2、個畫架,先把畫放到上面,然后可以進行一些處理,比如獲取圖像文件信息,做旋轉切割,放大縮小等操作!Canvas(畫布):如其名,畫布,可以在上面作畫(繪制),你既可以用Pa(畫筆),來畫各種形狀或者寫字,又可以用Path(路徑)來繪制多個點,然后連接成各種圖形! Matrix(矩陣):用于圖形特效處理的,顏色矩陣(ColorMatrix),還有使用Matrix進行圖像的平移,縮放,旋轉,傾斜等!而上述的這些都是Android中的底層圖形類:android.graphics給提供的接口!嗯,話不多說開始本節(jié)內(nèi)容!PS:文檔:Bitmap1.了解Bitmap,BitmapFactory,Bitmap

3、Facotry.Options如題,本來可以直接三個東東的關系的,但是我就是要傲嬌,就要看代碼!如果你打開Bitmap類的源碼,你會看到Bitmap的構造方法上有這樣一段東東:大概想說的就是:Bitmap的構造方法是私有的,外面不能實例化,只能通過JNI實例化!當然,肯定也會給提供一個接口給來創(chuàng)建Bitmap的,而這個接口類就是:BitmapFactory!來來來,打開BitmapFactory類,點下左邊的Structure可以看到BitmapFactory給提供了這些方法,大部分都是decode,通過各種形式來創(chuàng)建Bitmap的!接著 于是乎又發(fā)現(xiàn)了,每法,都會有一個Options類型的參

4、數(shù),點進去看看:發(fā)現(xiàn)了這貨是一個靜態(tài)類:BitmapFacotry.Options!而他是用來設置decode時的選項的!2.Bitmap常用方法普通方法publiccompress (pressFormat format,quality, OutputStream stream)對這里的某些參數(shù)的值進行設置,比如inJustDecodeBounds設置為true避免 OOM(內(nèi)存溢出),什么,不知道OOM,沒事,等下一點點跟你說清楚!最后回到的Bitmap!嗯,Bitmap中的方法比較多,就不一一進行講解了,從中挑幾個用得較多的來講解!中文文檔:Android中文API(136) Bitma

5、pBitmapFactory.Option可設置參數(shù):inJustDecodeBounds如果設置為true,不獲取,不分配內(nèi)存,但會返回的高寬度信息。inSleSize縮放的倍數(shù)。如果設為4,則寬和高都為原來的1/4,則圖是原來的1/16。outWidth獲取的寬度值將位圖的壓縮到指定的OutputStream,可以理解成將Bitmap保存到文件中!format:格式,PNG,JPG等;quality:壓縮質(zhì)量,0-100,0表示最低畫質(zhì)壓縮,100最大質(zhì)量(PNG無損,會忽略品質(zhì)設定)stream:輸出流返回值代表是否成功壓縮到指定流!void recycle():回收位圖占用的內(nèi)存空間,

6、把位圖標記為Dead isRecycled():判斷位圖內(nèi)存是否已getWidth():獲取位圖的寬度 getHeight():獲取位圖的高度isMutable():是否可修改getScaledWidth(Canvas canvas):獲取指定密度轉換后的圖像的寬度getScaledHeight(Canvas canvas):獲取指定密度轉換后的圖像的高度靜態(tài)方法:Bitmap createBitmap(Bitmap src):以src為原圖生成不可變得新圖像 Bitmap createScaledBitmap(Bitmap src,dstWidth,dstHeight, filter):以s

7、rc為原圖,創(chuàng)建新的圖像,指定新圖像的高寬以及是否變。Bitmap createBitmap(width,height, Config config):創(chuàng)建指定格式、大小的位圖Bitmap createBitmap(Bitmap source,x,y,width,height)以source為原圖,創(chuàng)建新的 ,指定起始坐標以及新圖像的高寬。 public s ic Bitmap createBitmap(Bitmap source, x, y, width, height,Matrix m,filter)好吧,就貼這么多吧,要用自己查文檔3.獲取Bitmap位圖BitmapDrawable方法

8、:你可以創(chuàng)建一個構造一個BitmapDrawable對象,比如通過流構建BitmapDrawable:BitmapDrawabmpMeizi = newBitmapDrawable(getAssets().open(pic_meizi.jpg); Bitmap mBitmap = bmpMeizi.getBitmap();img_bg.set mageBitmap(mBitmap);.BitmapFactory方法:都是靜態(tài)方法,直接調(diào),可以通過資源ID、路徑、文件、數(shù)據(jù)流等方式來獲取位圖!/通過資源 Dprivate Bitmap getBitmap romResource(Resourre

9、s, return Bitmap actory.decodeResource(res, res d);.res d) /文件private Bitmap getBitmap rotring pathName) 從資源中獲取位圖的方式有兩種:通過BitmapDrawable或者BitmapFactory,下面演示下:首先得獲得這個outHeight獲取的高度值inDensity用于位圖的像素壓縮比argetDensity用于目標位圖的像素壓縮比(要生成的位圖) inScaled設置為true時進行壓縮,從inDensity到argetDensity。.return Bitmap actory.d

10、ecode ile(pathName);/字節(jié)數(shù)組.0.2.3.4.publicifBitmap Bytes2Bimap(byte b) (b.length != 0) return else returnBitmap actory.decodeByteArray(b, 0, b.length);null;/輸入流 private BitmapgetBitmap romStream( nputStream inputStream)return Bitmap actory.decodeStream(inputStream);4.獲取Bitmap的相關信息:這個,只要獲取了Bitmap對象,就可以

11、調(diào)用相關方法來獲取對應的參數(shù)了,getByteCount獲得大小,getHeight和getWidth這些這里就不寫了,自己查文檔!5.摳上的某一角下來有時,可能你想把上的某一角扣下來,直接通過Bitmap的createBitmap()扣下來即可參數(shù)依次為:處理的bitmap對象,起始x,y坐標,以及截取的寬高Bitmap bitmap = Bitmap actory.decodeResource(getResourpic_meizi);(), R.mipmap.Bitmap bitmap2 = Bitmap.createBitmap(bitmap , 00, 00,200,200); img

12、_bg = ( mageView) findViewBy d(R.id.img_bg);img_bg.set mageBitmap(bitmap2);運行效果圖:原圖:切下來的一角:6.對Bitmap進行縮放這里不用Matrix來對Bitmap,而是直接使用Bitmap給的createScaledBitmap來實現(xiàn),參數(shù)依次是:處理的bitmap對象,縮放后的寬高,提供7.使用Bitmap進行截屏運行效果圖:實現(xiàn)代碼:public class MainActivity extendsptivity .sic ByteArrayOutputStream byteOut = null;privat

13、e Bitmap bitmap = null; private Button btn_cut;Overrideprotected void onCreate(Bundle saved nstane) super.onCreate(saved nstane);setContentView(R.layout.activity_main); btn_cut = (Button) findViewBy d(R.id.btn_cut);btn_cut.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(Vie

14、w v) captureScreen(););.0.public void captureScreen() Runnable action = new Runnable() .2.3.4.5.Overridepublic void run() final View contentView = getWindow().getDecorView(); tryLog.e(HEHE,contentView.getHeight() : contentView.getWidth();bitmap = Bitmap.createBitmap(contentView.getWidth(),contentVie

15、w.getHeight(), Bitmap.Config.ARGB_4444);contentView.draw(new Canvas(bitmap); ByteArrayOutputStream byteOut = newByteArrayOutputStream();6.7.8.9.0.press(press ormat.JPEG, 00,byteOut);.2.3.4.5.6.7.8.9.0.2.3.4.5.6.7.8.9.0.2.3.4.5.6.7.8.savc(bitmap, sdcard/short.png);catch (Exception e)e.pr finally tryS

16、tackTrace();if(null != byteO(null !=byteOut) lose();bitmap & !bitmap.isRecycled() if/bitmap.recycle();bitmap = null;catch( OException e)e.prStackTrace();tryaction.run(); catch (Exceptione) e.prStackTrace();private void savc(Bitmap b, String str ileName) ileOutputStream fos = null;tryfos = new ileOut

17、putStream(str ileName);if(null != fos) sucs=press(press ormat.PNG,00, fos);9.fos.flush();0.2.fos.close();if(sucs)Toast.makeText(MainActivity.this, 截屏成功, Toast.L ENGTH_SHORT).show();3.4.5.6.7.8.9.0. catch (e.pr catch (e.prileNot oundException e) StackTrace();OException e) StackTrace();代碼分析:本節(jié)小結:本節(jié)給大家講解下Bitmap,BitmapFactory和他的靜態(tài)類Options,以及 BitmapDrawable的基本使用,其實Bitmap知道怎么創(chuàng)建就好了,他的擴展一般是通過Matrix和 Canvas來實現(xiàn)的,Bitm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論