国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現拍照及圖片顯示效果

2019-12-12 03:21:18
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android拍照及圖片顯示的具體代碼,供大家參考,具體內容如下

1、功能聲明

當應用需要使用相機、NFC等外設時,需要在AndroidManifest.xml中進行聲明。
這樣,當設備缺少這些外設時,應用商店的安裝程序可以拒絕安裝設備。

聲明示例代碼如下:

<uses-feature android:name="android.hardware.camera2"    <!-- required為false時,不強制要求設備支持該功能 -->    <!-- 如果不設置該值,一旦設備不支持camera,就不能安裝該應用-->    android:required="false"/>

2、創建指向文件的File對象

拍攝的照片可以存放到設備的外部存儲區。

Android為不同的應用分配的獨有的存儲區域,同時按照存儲數據的類型對存儲區域做了進一步地劃分。
設置照片存儲區域的代碼示例如下所示:

public File getPhotoFile(Crime crime) {  //獲取應用對應的存儲照片的外部存儲路徑  File externalFilesDir = mContext      .getExternalFilesDir(Environment.DIRECTORY_PICTURES);  if (externalFilesDir == null) {    return null;  }  //創建指向文件的File對象  return new File(externalFilesDir, crime.getPhotoFilename());}.............//每個crime對應的文件名public String getPhotoFilename() {  return "IMG_" + getId().toString() + ".jpg";}

3、觸發拍照

可以使用MediaStore.ACTION_CAPTURE_IMAGE類型的Intent觸發拍照,示例代碼如下:

mPhotoButton = (ImageButton) v.findViewById(R.id.crime_camera);//隱式Intent觸發相機拍照final Intent captureImageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//mPhotoFile保存著上文創建的指向指定地址的File//此處判斷是否有能夠處理隱式Intent的組件boolean canTakePhoto = mPhotoFile != null    && captureImageIntent.resolveActivity(packageManager) != null;mPhotoButton.setEnabled(canTakePhoto);if (canTakePhoto) {  //得到File文件對應的Uri地址  Uri uri = Uri.fromFile(mPhotoFile);  //將Uri地址存入到Intent中,相機拍照得到的圖像將會存入到該Uri地址對應的File里  captureImageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);}mPhotoButton.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {    startActivityForResult(captureImageIntent, REQUEST_PHOTO);  }});

4、處理拍照結果

拍照完成后,將可以加載得到圖片了。

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {  .........  } else if (requestCode == REQUEST_PHOTO) {    updatePhotoView();  }  .........}private void updatePhotoView() {  if (mPhotoFile == null || !mPhotoFile.exists()) {    mPhotoView.setImageDrawable(null);  } else {    //加載圖片對應的縮略圖    Bitmap bitmap = PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity());    mPhotoView.setImageBitmap(bitmap);  }}

Bitmap只存儲實際像素數據,因此即使原始照片已經壓縮過,但存入Bitmap對象時,文件并不會被壓縮。

因此加載圖片時,需要先按照給定區域的大小合理的縮放文件。 然后,用Bitmap加載縮放后的文件,示例代碼如下:

//在具體視圖未加載前,無法得到視圖的實際大小//因此根據屏幕尺寸,使用估算值進行縮放public static Bitmap getScaledBitmap(String path, Activity activity) {  Point size = new Point();  activity.getWindowManager().getDefaultDisplay().getSize(size);  return getScaledBitmap(path, size.x, size.y);}public static Bitmap getScaledBitmap(String path, int destWidth, int destHeight) {  BitmapFactory.Options options = new BitmapFactory.Options();  options.inJustDecodeBounds = true;  //按照正常尺寸解析文件  BitmapFactory.decodeFile(path, options);  //得到原始文件的寬和高  float srcWidth = options.outWidth;  float srcHeight = options.outHeight;  //inSampleSize表示水平/豎直抽樣比  //例如,inSampleSize為2時,水平和數值均在原始基礎上,每2個點抽取1個點  //于是,新圖的大小變為原來的1/4  int inSampleSize = 1;  if (srcHeight > destHeight || srcWidth > destWidth) {    if (srcWidth > srcHeight) {      inSampleSize = Math.round(srcHeight / destHeight);    } else {      inSampleSize = Math.round(srcWidth / destWidth);    }   }  options = new BitmapFactory.Options();  options.inSampleSize = inSampleSize;  //按新的抽樣比,重新解析文件  return BitmapFactory.decodeFile(path, options);}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 改则县| 新河县| 南康市| 贵溪市| 闵行区| 忻州市| 广平县| 盐池县| 贵港市| 东乡族自治县| 临湘市| 湘西| 洛南县| 武功县| 江油市| 蒲城县| 广元市| 安国市| 桃源县| 石屏县| 定南县| 花垣县| 米泉市| 安溪县| 平安县| 韩城市| 景洪市| 社旗县| 沙坪坝区| 凤山市| 通化市| 阜平县| 仁寿县| 新田县| 古田县| 中卫市| 斗六市| 洛南县| 永寿县| 常宁市| 平舆县|