使用Android系统相机捕获图片(一)

写文章的目的

  1. 静下心来学习
  2. 知识点的积累
  3. 总结,做笔记

导读

个人认为系统相机捕获图片是一个复合功能点,包括调用相机、拍照、返回图片,还要考虑实际的应用场景:如手机版本等,因此会分为几篇文章去讲解,由简入繁。每一篇主体是示例代码,通过代码去理解这个功能。

需求

  • 调用系统相机
  • 返回图片
  • 显示图片

代码解构

1.调用系统相机:使用Intent方式,action使用的是MediaStore.ACTION_IMAGE_CAPTURE。看到这么长的参数可能会很慌,其实不用着急。MediaStore是一个Media provider,包含内部存储和外部存储的媒体元数据。ACTION_IMAGE_CAPTURE里面单词也很简单:图片捕获。那么整个其实也就能理解了:相机就是用来拍照的,拍照也就是捕获图片,拍完后需要存储。废话少说,直接上代码。

//创建intent ,设置action
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//调用相机
startActivityForResult(intent, IMAGE_RESULT);

2.返回图片并显示:既然使用startActivityForResult,当然要用onActivityResult去接收。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != RESULT_OK ){
              return;
        }
        if(requestCode == IMAGE_RESULT){
              //通过data获取bundle数据
              Bundle extras = data.getExtras();
              //拍照后系统会返回一个bitmap,key是data。(没有找到常量去代替data)
              Bitmap bitmap = (Bitmap) extras.get("data");
              //显示图片
              imageView.setImageBitmap(bitmap);
        }
}

3.显示结果:会发现只显示了一点点???并不是我的ImageView只用这么大,而是返回的图片只用这么一点。可以在获取打印bitmap 的宽高验证一下。


使用Android系统相机捕获图片(一)_第1张图片
Screenshot_20181107-101719.jpg

总结

那么,使用系统相机捕获图片最简单的样例就讲完了。可能会有疑问:这么一点图片有什么用?图片太小看的我眼睛疼,我需要大图又该怎么实现?请听下回分解。

代码样例

1.xml代码




    

2.java代码

package com.rflash.captrueimage01;

import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button button;
    private ImageView imageView;

    private final int IMAGE_RESULT = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.btn);
        imageView = findViewById(R.id.iv);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.btn:
                //打开相机
                openCameraForResult();
                break;
        }
    }

    /**
     * 打开相机
     */
    private void openCameraForResult() {
        //创建intent ,设置action
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //调用相机
        startActivityForResult(intent, IMAGE_RESULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != RESULT_OK) {
            return;
        }
        if (requestCode == IMAGE_RESULT) {
            //通过data获取bundle数据
            Bundle extras = data.getExtras();
            //拍照后系统会返回一个bitmap,key是data。(没有找到常量去代替data)
            Bitmap bitmap = (Bitmap) extras.get("data");
            //打印bitmap宽高
            Log.d("--width", bitmap.getWidth() + "");
            Log.d("--height", bitmap.getHeight() + "");
            //显示图片
            imageView.setImageBitmap(bitmap);
        }
    }
}

你可能感兴趣的:(使用Android系统相机捕获图片(一))