• 四十七、实现调用Android手机的拍照功能


    一、main.xml布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:orientation="vertical"
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent">
    	<ImageView android:id="@+id/imageView" 
    	    android:adjustViewBounds="true"
    	    android:layout_gravity="center"
    		android:minWidth="150dip" 
    		android:minHeight="150dip"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"/>
    	<Button android:id="@+id/btnPhone" 
    		android:layout_width="fill_parent" 
    	    android:layout_height="wrap_content"
    		android:text="相册" />
    	<Button android:id="@+id/btnTakePicture" 
    	    android:layout_height="wrap_content"
    		android:layout_width="fill_parent" 
    		android:text="拍照" />
    </LinearLayout>
    

                 

                

    二、核心代码

    package com.ljq.test;

    import java.io.ByteArrayOutputStream;
    import java.io.File;

    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;

    public class TestActivity extends Activity {
    private static final int NONE = 0;
    private static final int PHOTO_GRAPH = 1;// 拍照
    private static final int PHOTO_ZOOM = 2; // 缩放
    private static final int PHOTO_RESOULT = 3;// 结果
    private static final String IMAGE_UNSPECIFIED = "image/*";
    private ImageView imageView = null;
    private Button btnPhone = null;
    private Button btnTakePicture = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    imageView = (ImageView) findViewById(R.id.imageView);
    btnPhone = (Button) findViewById(R.id.btnPhone);
    btnPhone.setOnClickListener(onClickListener);
    btnTakePicture = (Button) findViewById(R.id.btnTakePicture);
    btnTakePicture.setOnClickListener(onClickListener);
    }

    private final View.OnClickListener onClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    if(v==btnPhone){ //从相册获取图片
    Intent intent = new Intent(Intent.ACTION_PICK, null);
    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
    startActivityForResult(intent, PHOTO_ZOOM);
    }else if(v==btnTakePicture){ //从拍照获取图片
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
    .getExternalStorageDirectory(),"temp.jpg")));
    startActivityForResult(intent, PHOTO_GRAPH);
    }

    }

    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == NONE)
    return;
    // 拍照
    if (requestCode == PHOTO_GRAPH) {
    // 设置文件保存路径
    File picture = new File(Environment.getExternalStorageDirectory()
    + "/temp.jpg");
    startPhotoZoom(Uri.fromFile(picture));
    }

    if (data == null)
    return;

    // 读取相册缩放图片
    if (requestCode == PHOTO_ZOOM) {
    startPhotoZoom(data.getData());
    }
    // 处理结果
    if (requestCode == PHOTO_RESOULT) {
    Bundle extras = data.getExtras();
    if (extras != null) {
    Bitmap photo = extras.getParcelable("data");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件
    //此处可以把Bitmap保存到sd卡中,具体请看:http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html
    imageView.setImageBitmap(photo); //把图片显示在ImageView控件上
    }

    }

    super.onActivityResult(requestCode, resultCode, data);
    }

    /**
    * 收缩图片
    *
    *
    @param uri
    */
    public void startPhotoZoom(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
    intent.putExtra("crop", "true");
    // aspectX aspectY 是宽高的比例
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    // outputX outputY 是裁剪图片宽高
    intent.putExtra("outputX", 300);
    intent.putExtra("outputY", 500);
    intent.putExtra("return-data", true);
    startActivityForResult(intent, PHOTO_RESOULT);
    }

    }
  • 相关阅读:
    防止特殊html字符的问题(xxs攻击)方法
    asp.net 服务器Button控件使用(onclick和onclientclick使用)
    Asp:Button控件onclick事件无刷新页面提示消息
    动态添加Marquee标签,并动态赋值与属性
    asp.net 前台通过Eval()绑定动态显示样式
    asp.net 中json字符串转换
    近况
    C# fixed语句固定变量详解
    fixed说明
    Net架构必备工具列表
  • 原文地址:https://www.cnblogs.com/linjiqin/p/2304970.html
Copyright © 2020-2023  润新知