Android实现拍照并存储功能,Android实现拍照及图片显示效果
本文實例為大家分享了Android拍照及圖片顯示的具體代碼,供大家參考,具體內容如下
1、功能聲明
當應用需要使用相機、NFC等外設時,需要在AndroidManifest.xml中進行聲明。
這樣,當設備缺少這些外設時,應用商店的安裝程序可以拒絕安裝設備。
聲明示例代碼如下:
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、處理拍照結果
拍照完成后,將可以加載得到圖片了。
@Override
public 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);
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
總結
以上是生活随笔為你收集整理的Android实现拍照并存储功能,Android实现拍照及图片显示效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java map 多个值_java 一个
- 下一篇: python搜论文_python论文