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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

拍照及圖片顯示

2019-11-09 14:05:59
字體:
供稿:網(wǎng)友

1、功能聲明 當(dāng)應(yīng)用需要使用相機、NFC等外設(shè)時,需要在AndroidManifest.xml中進行聲明。 這樣,當(dāng)設(shè)備缺少這些外設(shè)時,應(yīng)用商店的安裝程序可以拒絕安裝設(shè)備。

聲明示例代碼如下:

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

2、創(chuàng)建指向文件的File對象 拍攝的照片可以存放到設(shè)備的外部存儲區(qū)。

Android為不同的應(yīng)用分配的獨有的存儲區(qū)域,同時按照存儲數(shù)據(jù)的類型對存儲區(qū)域做了進一步地劃分。 設(shè)置照片存儲區(qū)域的代碼示例如下所示:

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

3、觸發(fā)拍照 可以使用MediaStore.ACTION_CAPTURE_IMAGE類型的Intent觸發(fā)拍照,示例代碼如下:

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

4、處理拍照結(jié)果 拍照完成后,將可以加載得到圖片了。

@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 { //加載圖片對應(yīng)的縮略圖 Bitmap bitmap = PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity()); mPhotoView.setImageBitmap(bitmap); }}

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

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

//在具體視圖未加載前,無法得到視圖的實際大小//因此根據(jù)屏幕尺寸,使用估算值進行縮放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時,水平和數(shù)值均在原始基礎(chǔ)上,每2個點抽取1個點 //于是,新圖的大小變?yōu)樵瓉淼?/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);}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金寨县| 封丘县| 雷州市| 凉山| 赞皇县| 乌兰浩特市| 黑山县| 葵青区| 陈巴尔虎旗| 伊金霍洛旗| 田阳县| 山丹县| 东城区| 娱乐| 彰化县| 元阳县| 新乡县| 漳浦县| 肃宁县| 融水| 鄄城县| 沁水县| 沽源县| 周口市| 漳平市| 泸定县| 林周县| 新和县| 隆子县| 平阳县| 内乡县| 海晏县| 拉萨市| 于都县| 莲花县| 双牌县| 康平县| 吉首市| 宜川县| 湛江市| 庐江县|