Android调用相机拿到图片

我们平时会调用相机拿到图片,但是,调用相机容易,当我们拿到图片时,拿到的往往是缩略图,那么,当我们

用到高清原图的时候又该怎么办呢?

1.布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="visahall.cn.testcamera.MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin">

            <Button
                android:id="@+id/btn1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="普通相机" />

            <Button
                android:id="@+id/btn2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="高清相机" />

            <Button
                android:id="@+id/btn3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="调用相册" />

            <ImageView
                android:id="@+id/imageView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                 />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

2.MainActivity:

package visahall.cn.testcamera;

import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.File;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn1;
    private Button btn2;
    private Button btn3;
    private ImageView imageView;

    private File mPhotoFile;
    private String mPhotoPath;

    /**
     * 表示:  普通画质为1     高清原图为2   相册为3
     */
    private static final int PICTURE_PUTONG_CODE = 1;
    private static final int CAMERA_GAOQING_CODE = 2;
    private static final int PHOTO_XIANGCE_CODE = 3;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

    }

    private void initView() {
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        imageView = (ImageView) findViewById(R.id.imageView);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            //普通相机
            case R.id.btn1:
                startActivityForResult(new  Intent(MediaStore.ACTION_IMAGE_CAPTURE),PICTURE_PUTONG_CODE);
                break;
            //高清相机
            case R.id.btn2:
                try {
                    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                    mPhotoPath = "mnt/sdcard/DCIM/Camera/" + "test.jpg";
                    mPhotoFile = new File(mPhotoPath);
                    if (!mPhotoFile.exists()) {
                        mPhotoFile.createNewFile();
                    }
                    intent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.fromFile(mPhotoFile));
                    startActivityForResult(intent, CAMERA_GAOQING_CODE);
                } catch (Exception e) {
                }
                break;
            //调用相册
            case R.id.btn3:
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");// 选择图片类型
                // 在onActivityResult中处理选择结果
                startActivityForResult(intent, PHOTO_XIANGCE_CODE);
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && data != null)
        {
            Uri uri = data.getData();
            Bitmap bitmap = null;
            if (null != uri)
            {
                String imgPath = null;
                ContentResolver resolver = this.getContentResolver();
                String[] columns = { MediaStore.Images.Media.DATA };
                Cursor cursor = null;
                cursor = resolver.query(uri, columns, null, null, null);
                if (Build.VERSION.SDK_INT > 18)// 4.4以后文件选择发生变化,判断处理
                {
                    if (requestCode == PHOTO_XIANGCE_CODE)// 图库----选择图片
                    {
                        imgPath = uri.getPath();
                        if (!TextUtils.isEmpty(imgPath)
                                && imgPath.contains(":"))
                        {
                            String imgIndex = imgPath.split(":")[1];
                            cursor = resolver.query(
                                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                    columns, "_id=?", new String[] { imgIndex },
                                    null);
                        }
                    }
                }
                if (null != cursor && cursor.moveToFirst())
                {
                    int columnIndex = cursor.getColumnIndex(columns[0]);
                    imgPath = cursor.getString(columnIndex);
                    cursor.close();
                }
                if (!TextUtils.isEmpty(imgPath))
                {
                    bitmap = BitmapFactory.decodeFile(imgPath, null);
                    imageView.setImageBitmap(bitmap);

                }
            }
            else if (requestCode == PICTURE_PUTONG_CODE)    // 拍照---拿到缩略图
            {
                // 拍照时,注意小米手机不会保存图片到本地,只可以从intent中取出bitmap, 要特殊处理
                Object object = data.getExtras().get("data");
                if (null != object && object instanceof Bitmap)
                {
                    bitmap = (Bitmap) object;
                    imageView.setImageBitmap(bitmap);
                }
            }
        }else if (requestCode == CAMERA_GAOQING_CODE)        //拍照---拿到原图
        {
            Bitmap bitmap = BitmapFactory.decodeFile(mPhotoPath, null);
            imageView.setImageBitmap(bitmap);
        }
    }
}

3.不要忘了加上相机和文件的权限:

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

总结:如果需要把原图上传,建议等待几秒在上传,否则可能会出现正在转化而上传失败。

Demo下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值