美文网首页
Android控制摄像头拍照并对照片进行裁剪的代码

Android控制摄像头拍照并对照片进行裁剪的代码

作者: 最穷码农 | 来源:发表于2019-01-16 09:51 被阅读0次

    下面代码是关于Android控制摄像头拍照并对照片进行裁剪的代码,希望能对码农们有一些好处。

    package cn.testcamera;

    import java.io.File;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import android.app.Activity;

    import android.content.ContentResolver;

    import android.content.ContentUris;

    import android.content.Intent;

    import android.database.Cursor;

    import android.graphics.Bitmap;

    import android.graphics.BitmapFactory;

    import android.net.Uri;

    import android.os.Bundle;

    import android.provider.MediaStore;

    import android.view.View;

    import android.widget.Button;

    import android.widget.ImageView;

    public class MainActivity extends Activity {

    private Button mButton;

    private ImageView mImageView;

    private File mPhotoFile;

    private String mPhotoPath;

    private Uri mPhotoOnSDCardUri;

        public final static int CAMERA_RESULT=777;

        public final static int CAMERA_RESULT_CUT=888;

        public final static int CAMERA_RESULT_CUT_OVER=999;

        public final static String TAG="xx";

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mButton = (Button) findViewById(R.id.button);

    mButton.setOnClickListener(new ButtonOnClickListener());

    mImageView = (ImageView) findViewById(R.id.imageView);

    }

    private class ButtonOnClickListener implements View.OnClickListener {

    public void onClick(View v) {

    try {

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

    mPhotoPath="mnt/sdcard/DCIM/Camera/"+getPhotoFileName();

    mPhotoFile = new File(mPhotoPath);

    if (!mPhotoFile.exists()) {

    mPhotoFile.createNewFile();

    }

    mPhotoOnSDCardUri=Uri.fromFile(mPhotoFile);

        intent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoOnSDCardUri);

            startActivityForResult(intent,CAMERA_RESULT_CUT);

    } catch (Exception e) {

    }

    }

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode==CAMERA_RESULT) {

    Bitmap bitmap = BitmapFactory.decodeFile(mPhotoPath, null); 

    mImageView.setImageBitmap(bitmap);

    }

    if (requestCode == CAMERA_RESULT_CUT) {

    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,mPhotoOnSDCardUri);

    sendBroadcast(intent);

    try {

    Thread.sleep(2000);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    Uri systemImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

    ContentResolver contentResolver = getContentResolver();

    Cursor cursor = contentResolver.query(systemImageUri, null,

    MediaStore.Images.Media.DISPLAY_NAME + "='"

    + mPhotoFile.getName() + "'", null, null);

    Uri photoUriInMedia = null;

    if (cursor != null && cursor.getCount() > 0) {

    cursor.moveToLast();

    long id = cursor.getLong(0);

    photoUriInMedia = ContentUris.withAppendedId(systemImageUri, id);

    }

    cursor.close();

    Intent in = new Intent("com.android.camera.action.CROP");

    in.putExtra("crop", "true");

    in.putExtra("outputX", 250);

    in.putExtra("outputY", 250);

    in.putExtra("aspectX", 1);

    in.putExtra("aspectY", 1);

    in.putExtra("return-data", true);

    startActivityForResult(in, CAMERA_RESULT_CUT_OVER);

    }

    if (requestCode==CAMERA_RESULT_CUT_OVER) {

    if (data!=null) {

    Bitmap bitmap = (Bitmap) data.getExtras().get("data");

    mImageView.setImageBitmap(bitmap);

    }

    }

    }

    private String getPhotoFileName() {

    Date date = new Date(System.currentTimeMillis());

    SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");

    return dateFormat.format(date) + ".jpg";

    }

    }

    main.xml

        android:layout_width="match_parent"

        android:layout_height="match_parent" >

        <Button

            android:id="@+id/button"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="点击按钮拍照"

        />

        <ImageView

            android:id="@+id/imageView"

            android:layout_below="@id/button"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

        />

    </RelativeLayout>

    manifest.xml如下:

        package="cn.testcamera"

        android:versionCode="1"

        android:versionName="1.0" >

        <uses-sdk

            android:minSdkVersion="8"

            android:targetSdkVersion="10" />

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

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

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

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

        <application

            android:icon="@drawable/ic_launcher"

            android:label="@string/app_name"

            android:theme="@style/AppTheme" >

            <activity

                android:name=".MainActivity"

                android:launchMode="singleTask"

                android:label="@string/title_activity_main" >

                <intent-filter>

                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />

                </intent-filter>

            </activity>

        </application>

    </manifest>

    相关文章

      网友评论

          本文标题:Android控制摄像头拍照并对照片进行裁剪的代码

          本文链接:https://www.haomeiwen.com/subject/jyppdqtx.html