久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android多媒體學習一:Android中Image的簡單實例,。

 深呼吸_DA 2014-08-29

在多媒體應用中,Image是最基礎的功能模塊,,接下來我們將看看在Android中是如何獲取和存儲Image的,。Android內(nèi)嵌的Image獲取和存儲功能,可以讓我們對于整個媒體框架有個比較全面的了解,,同時為audio和video的學習打下基礎,。
一、Image的獲取可以通過調(diào)Android自帶的Camera應用來完成,。該應用含有一個Intent-Filter,。通過使用
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent)就可以啟動Camera應用了,。
二,、Image存儲,Android系統(tǒng)中含有一個多媒體庫,,其中包括所有Image,、Video、Audio的數(shù)據(jù),。通過MediaStore對象可以訪問相關數(shù)據(jù),。

閑話少說,,直接看例子,這是一本英文書上的,,覺得寫的很好,,自己翻譯了一下,并加入了很多注釋,。以備查詢,。

 

  1. package demo.camera;  
  2. import java.io.File;  
  3. import android.app.Activity;  
  4. import android.content.ContentValues;  
  5. import android.content.Intent;  
  6. import android.graphics.Bitmap;  
  7. import android.graphics.BitmapFactory;  
  8. import android.net.Uri;  
  9. import android.os.Bundle;  
  10. import android.os.Environment;  
  11. import android.provider.MediaStore;  
  12. import android.util.Log;  
  13. import android.view.Display;  
  14. import android.view.View;  
  15. import android.widget.Button;  
  16. import android.widget.ImageView;  
  17. /** 
  18.  * 這里多媒體第一個示例,主要介紹Image的獲取和存儲 
  19.  * Image的獲取可以通過Android自帶的Camera應用來獲得,, 
  20.  * 圖片的存儲需要用到MediaStore對象,。Android中的多媒體庫。 
  21.  *  
  22.  * @author Administrator 
  23.  * 
  24.  */  
  25. public class MainActivity extends Activity {  
  26.       
  27.     private static final int RESULT_CODE = 1;  
  28.     private Button btnCamera;  
  29.     private ImageView imageView;  
  30.       
  31.     private Uri imageFilePath;  
  32.       
  33.     @Override  
  34.     public void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.main);  
  37.           
  38.           
  39.         imageView = (ImageView)this.findViewById(R.id.imageView);  
  40.         btnCamera = (Button)this.findViewById(R.id.camera);  
  41.         btnCamera.setOnClickListener(new View.OnClickListener() {  
  42.               
  43.             @Override  
  44.             public void onClick(View v) {  
  45.                   
  46.                   
  47.                 /** 
  48.                  * 由于Camara返回的是縮略圖,,我們可以傳遞給他一個參數(shù)EXTRA_OUTPUT, 
  49.                  * 來將用Camera獲取到的圖片存儲在一個指定的URI位置處,。 
  50.                  * 下面就指定image存儲在SDCard上,并且文件名為123.jpg 
  51.                  * imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"123.jpg"; 
  52.                  * File file = new File(imageFilePath); //創(chuàng)建一個文件 
  53.                  * Uri imageUri = Uri.fromFile(file); 
  54.                  * 然而Android已經(jīng)提供了一個多媒體庫,,那里統(tǒng)一存放了設備上所有的多媒體數(shù)據(jù),。所以, 
  55.                  * 我們可以將獲取到的圖片存放在那個多媒體庫中,。 
  56.                  * Android提供了MediaStore類,,該類是一個ContentProvider,管理著設備上自帶的和外部的多媒體文件,, 
  57.                  * 同時包含著每一個多媒體文件的數(shù)據(jù)信息,。 
  58.                  * 為了將數(shù)據(jù)存儲在多媒體庫,使用ContentResolver對象來操縱MediaStore對象 
  59.                  * 在MediaStore.Images.Media中有兩個URI常量,,一個是    EXTERNAL_CONTENT_URI,另一個是INTERNAL_CONTENT_URI 
  60.                  * 第一個URI對應著外部設備(SDCard),,第二個URI對應著系統(tǒng)設備內(nèi)部存儲位置。 
  61.                  * 對于多媒體文件,,一般比較大,,我們選擇外部存儲方式 
  62.                  * 通過使用ContentResolver對象的insert方法我們可以向MediaStore中插入一條數(shù)據(jù) 
  63.                  * 這樣在檢索那張圖片的時候,不再使用文件的路徑,,而是根據(jù)insert數(shù)據(jù)時返回的URI,,獲取一個InputStream 
  64.                  * 并傳給BitmapFactory 
  65.                  */  
  66.                 //在這里啟動Camera。  
  67.                 //Camera中定義了一個Intent-Filter,,其中Action是android.media.action.IMAGE_CAPTURE  
  68.                 //我們使用的時候,,最好不要直接使用這個,而是用MediaStore中的常量ACTION_IMAGE_CAPTURE.  
  69.                 //這個常量就是對應的上面的action  
  70.                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  71.               
  72.                 //這里我們插入一條數(shù)據(jù),,ContentValues是我們希望這條記錄被創(chuàng)建時包含的數(shù)據(jù)信息  
  73.                 //這些數(shù)據(jù)的名稱已經(jīng)作為常量在MediaStore.Images.Media中,有的存儲在MediaStore.MediaColumn中了  
  74.                 //ContentValues values = new ContentValues();  
  75.                 ContentValues values = new ContentValues(3);  
  76.                 values.put(MediaStore.Images.Media.DISPLAY_NAME, "testing");  
  77.                 values.put(MediaStore.Images.Media.DESCRIPTION, "this is description");  
  78.                 values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");  
  79.                 imageFilePath = MainActivity.this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  
  80.                 intent.putExtra(MediaStore.EXTRA_OUTPUT, imageFilePath); //這樣就將文件的存儲方式和uri指定到了Camera應用中  
  81.                   
  82.                 //由于我們需要調(diào)用完Camera后,,可以返回Camera獲取到的圖片,  
  83.                 //所以,,我們使用startActivityForResult來啟動Camera                      
  84.                 startActivityForResult(intent, RESULT_CODE);  
  85.                   
  86.             }  
  87.         });  
  88.     }  
  89.     /** 
  90.      * 為了獲取Camera返回的圖片信息,,重寫該方法,。 
  91.      */  
  92.     @Override  
  93.     public void onActivityResult(int requestCode, int resultCode, Intent data){  
  94.         super.onActivityResult(requestCode, resultCode, data);  
  95.         if(resultCode == RESULT_CODE){  
  96.             //說明是由Camera返回的數(shù)據(jù)  
  97.             //由Camera應用返回的圖片數(shù)據(jù)是一個Camera對象,存儲在一個名為data的extra域  
  98.             //然后將獲取到的圖片存儲顯示在ImageView中  
  99.               
  100.             try {  
  101.                 Bundle extra = data.getExtras();  
  102.                 /** 
  103.                  * 然而為了節(jié)約內(nèi)存的消耗,,這里返回的圖片是一個121*162的縮略圖,。 
  104.                  * 那么如何返回我們需要的大圖呢?看上面 
  105.                  * 然而存儲了圖片,。有了圖片的存儲位置,,能不能直接將圖片顯示出來呢》 
  106.                  * 這個問題就設計到對于圖片的處理和顯示,是非常消耗內(nèi)存的,,對于PC來說可能不算什么,,但是對于手機來說 
  107.                  * 很可能使你的應用因為內(nèi)存耗盡而死亡。不過還好,,Android為我們考慮到了這一點 
  108.                  * Android中可以使用BitmapFactory類和他的一個內(nèi)部類BitmapFactory.Options來實現(xiàn)圖片的處理和顯示 
  109.                  * BitmapFactory是一個工具類,,里面包含了很多種獲取Bitmap的方法。BitmapFactory.Options類中有一個inSampleSize,,比如設定他的值為8,則加載到內(nèi)存中的圖片的大小將 
  110.                  * 是原圖片的1/8大小,。這樣就遠遠降低了內(nèi)存的消耗,。 
  111.                  * BitmapFactory.Options op = new BitmapFactory.Options(); 
  112.                  * op.inSampleSize = 8; 
  113.                  * Bitmap pic = BitmapFactory.decodeFile(imageFilePath, op); 
  114.                  * 這是一種快捷的方式來加載一張大圖,因為他不用考慮整個顯示屏幕的大小和圖片的原始大小 
  115.                  * 然而有時候,,我需要根據(jù)我們的屏幕來做相應的縮放,,如何操作呢? 
  116.                  *  
  117.                  */  
  118.                 //首先取得屏幕對象  
  119.                 Display display = this.getWindowManager().getDefaultDisplay();  
  120.                 //獲取屏幕的寬和高  
  121.                 int dw = display.getWidth();  
  122.                 int dh = display.getHeight();  
  123.                 /** 
  124.                  * 為了計算縮放的比例,,我們需要獲取整個圖片的尺寸,,而不是圖片 
  125.                  * BitmapFactory.Options類中有一個布爾型變量inJustDecodeBounds,將其設置為true 
  126.                  * 這樣,,我們獲取到的就是圖片的尺寸,,而不用加載圖片了。 
  127.                  * 當我們設置這個值的時候,,我們接著就可以從BitmapFactory.Options的outWidth和outHeight中獲取到值 
  128.                  */  
  129.                 BitmapFactory.Options op = new BitmapFactory.Options();  
  130.                 //op.inSampleSize = 8;  
  131.                 op.inJustDecodeBounds = true;  
  132.                 //Bitmap pic = BitmapFactory.decodeFile(imageFilePath, op);//調(diào)用這個方法以后,,op中的outWidth和outHeight就有值了  
  133.                 //由于使用了MediaStore存儲,這里根據(jù)URI獲取輸入流的形式  
  134.                 Bitmap pic = BitmapFactory.decodeStream(this  
  135.                         .getContentResolver().openInputStream(imageFilePath),  
  136.                         null, op);  
  137.                 int wRatio = (int) Math.ceil(op.outWidth / (float) dw); //計算寬度比例  
  138.                 int hRatio = (int) Math.ceil(op.outHeight / (float) dh); //計算高度比例  
  139.                 Log.v("Width Ratio:", wRatio + "");  
  140.                 Log.v("Height Ratio:", hRatio + "");  
  141.                 /** 
  142.                  * 接下來,,我們就需要判斷是否需要縮放以及到底對寬還是高進行縮放,。 
  143.                  * 如果高和寬不是全都超出了屏幕,那么無需縮放,。 
  144.                  * 如果高和寬都超出了屏幕大小,,則如何選擇縮放呢》 
  145.                  * 這需要判斷wRatio和hRatio的大小 
  146.                  * 大的一個將被縮放,因為縮放大的時,,小的應該自動進行同比率縮放,。 
  147.                  * 縮放使用的還是inSampleSize變量 
  148.                  */  
  149.                 if (wRatio > 1 && hRatio > 1) {  
  150.                     if (wRatio > hRatio) {  
  151.                         op.inSampleSize = wRatio;  
  152.                     } else {  
  153.                         op.inSampleSize = hRatio;  
  154.                     }  
  155.                 }  
  156.                 op.inJustDecodeBounds = false; //注意這里,,一定要設置為false,因為上面我們將其設置為true來獲取圖片尺寸了  
  157.                 pic = BitmapFactory.decodeStream(this.getContentResolver()  
  158.                         .openInputStream(imageFilePath), null, op);  
  159.                 imageView.setImageBitmap(pic);  
  160.             } catch (Exception e) {  
  161.                 e.printStackTrace();  
  162.             }   
  163.         }  
  164.     }  
  165. }  


    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多