Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> android基礎---->攝像頭與相冊的調用

android基礎---->攝像頭與相冊的調用

編輯:Android編程入門

  很多應用程序都可能會使用到調用攝像頭拍照和從相冊選取圖片的功能,今天我們開始android中攝像頭與相冊調用的學習。

 

目錄導航

  1.   調用攝像頭拍照
  2.   從相冊中選擇照片
  3.   友情鏈接

 

調用攝像頭拍照

大致流程:調用相機拍照,然後剪輯,之後再在imageView中顯示。項目結構如下:

一、 一些初始化的代碼:

public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
public static final int CHOOSE_PHOTO = 3;
private ImageView picture;
private Uri imageUri;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    picture = (ImageView) findViewById(R.id.picture);
}

二、 創建文件:

// 創建File對象,用於存儲拍照後的圖片
private File createImageFile(String fileName) {
    File outputImage = new File(Environment.getExternalStorageDirectory(), fileName);
    try {
        if (outputImage.exists()) {
            outputImage.delete();
        }
        outputImage.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return outputImage;
}

三、 調用系統相機拍照,

// 調用系統相機拍照,並創建一張jpg文件
public void takePhone(View view) {
    imageUri = Uri.fromFile(createImageFile("takephone.jpg"));
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intent, TAKE_PHOTO); // 啟動相機程序
}

四、 onActivityResult方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case TAKE_PHOTO:
            phoneTake(resultCode);
            break;
        case CROP_PHOTO:
            phoneCrop(resultCode);
            break;
        case CHOOSE_PHOTO:
            phoneChoose(resultCode, data);
            break;
        default:
            break;
    }
}

 五、 phoneTake方法:

// 拍照的回調
private void phoneTake(int resultCode) {
    if (resultCode == RESULT_OK) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(imageUri, "image/*");
        intent.putExtra("scale", true);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(intent, CROP_PHOTO); // 啟動裁剪程序
    }
}

 六、 phoneCrop方法,裁剪的回調

// 裁剪的回調
private void phoneCrop(int resultCode) {
    if (resultCode == RESULT_OK) {
        try {
            BufferedInputStream inputStream = new BufferedInputStream(getContentResolver().openInputStream(imageUri));
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            picture.setImageBitmap(bitmap); // 將裁剪後的照片顯示出來
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

 七、 聲明權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 

從相冊中選擇照片

一、 從相冊中選擇照片:

// 從相冊中選擇照片:
public void choosePhone(View view) {
    imageUri = Uri.fromFile(createImageFile("choosephone.jpg"));
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    intent.putExtra("crop", true);
    intent.putExtra("scale", true);
    startActivityForResult(intent, CHOOSE_PHOTO);
}

二、 從相冊中選取圖片,再顯示

// 從相冊中選取圖片,再顯示
private void phoneChoose(int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        ContentResolver resolver = getContentResolver();
        Uri originalUri = data.getData();
        try {
            Bitmap photo = MediaStore.Images.Media.getBitmap(resolver, originalUri);
            if (photo != null) {
                picture.setImageBitmap(photo);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

友情鏈接

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved