日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android实现拍照并存储功能,Android实现拍照及图片显示效果

發布時間:2024/7/23 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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实现拍照及图片显示效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。