我们平时会调用相机拿到图片,但是,调用相机容易,当我们拿到图片时,拿到的往往是缩略图,那么,当我们
用到高清原图的时候又该怎么办呢?
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" />
总结:如果需要把原图上传,建议等待几秒在上传,否则可能会出现正在转化而上传失败。