Welcome

首页 / 移动开发 / Android / Android拍照得到全尺寸图片并进行压缩

废话不多说了,直接给大家贴代码了,具体代码如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><Buttonandroid:id="@+id/take_photo"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Take Photo" /><Buttonandroid:id="@+id/get_photo"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="get Photo" /><ImageViewandroid:id="@+id/picture"android:layout_width="300dp"android:layout_height="300dp"android:layout_gravity="center_horizontal" /></LinearLayout>package com.example.choosepictest;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {static final int REQUEST_IMAGE_CAPTURE = 1;private Button takePhoto;private Button getPhoto;private ImageView picture;private Uri imgUri;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);takePhoto = (Button) findViewById(R.id.take_photo);getPhoto = (Button) findViewById(R.id.get_photo);picture = (ImageView) findViewById(R.id.picture);takePhoto.setOnClickListener(this);getPhoto.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.take_photo:dispatchTakePictureIntent();break;default:break;}}// 保存全尺寸照片String mCurrentPhotoPath;private void dispatchTakePictureIntent() {File appDir = new File(Environment.getExternalStorageDirectory(),"/etoury/picCache");if (!appDir.exists()) {appDir.mkdir();}String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());String fileName = timeStamp + ".jpg";File outputImage = new File(appDir, fileName);try {if (outputImage.exists()) {outputImage.delete();}outputImage.createNewFile();} catch (IOException e) {e.printStackTrace();}mCurrentPhotoPath = outputImage.getAbsolutePath();imgUri = Uri.fromFile(outputImage);// 意图 相机Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);// 如果有相机if (intent.resolveActivity(getPackageManager()) != null) {startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);}}//解码缩放图片(Decode a Scaled Image)private void setPic() {// Get the dimensions of the Viewint targetW = picture.getWidth();int targetH = picture.getHeight();// Get the dimensions of the bitmapBitmapFactory.Options bmOptions = new BitmapFactory.Options();// 该 值设为true那么将不返回实际的bitmap,也不给其分配内存空间这样就避免内存溢出了。但是允许我们查询图片的信息这其中就包括图片大小信息bmOptions.inJustDecodeBounds = true;BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);int photoW = bmOptions.outWidth;int photoH = bmOptions.outHeight;// Determine how much to scale down the image// Math.min求最小值int scaleFactor = Math.min(photoW/targetW, photoH/targetH);// Decode the image file into a Bitmap sized to fill the ViewbmOptions.inJustDecodeBounds = false;// 设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误bmOptions.inSampleSize = scaleFactor;// 如果inPurgeable设为True的话表示使用BitmapFactory创建的Bitmap,用于存储Pixel的内存空间在系统内存不足时可以被回收bmOptions.inPurgeable = true;Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);picture.setImageBitmap(bitmap);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode == RESULT_OK) {switch (requestCode) {case REQUEST_IMAGE_CAPTURE:setPic();break;default:break;}}}}
以上代码就是本文给大家介绍的Android拍照得到全尺寸图片并进行压缩 的全部内容,希望大家喜欢。