程序员人生 网站导航

Android相机相册的调用,图片的存储删除

栏目:综合技术时间:2016-11-17 09:30:10

主要以SimpleFilter的源码为例子详解,app可在百度利用商店下载
SimpleFilter源代码下载

xml

<?xml version="1.0" encoding="utf⑻"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv_change" android:layout_width="fill_parent" android:scaleType="fitXY" android:layout_height="220dp" android:maxWidth="1000dp" android:maxHeight="1000dp" android:src="@drawable/origin" /> <SeekBar android:id="@+id/sb_alpha" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_margin="10dp" /> <SeekBar android:id="@+id/sb_red" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_margin="10dp" /> <SeekBar android:id="@+id/sb_green" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_margin="10dp"/> <SeekBar android:id="@+id/sb_blue" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_margin="10dp"/> <TextView android:id="@+id/tv_display" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="8dp" android:textSize="16sp" android:textColor="#333333"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_photo" android:layout_height="40dp" android:layout_width="0dp" android:layout_marginLeft="4dp" android:text="拍 照" android:textColor="#fff" android:background="@xml/btn_blue" android:layout_weight="1"/> <Button android:id="@+id/btn_picture" android:layout_height="40dp" android:layout_width="0dp" android:layout_marginLeft="4dp" android:layout_weight="1" android:textColor="#fff" android:layout_marginRight="4dp" android:background="@xml/btn_blue" android:text="相 册"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:orientation="horizontal"> <Button android:id="@+id/btn_save" android:layout_height="40dp" android:layout_width="0dp" android:textColor="#fff" android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@xml/btn_blue" android:text="保 存"/> <Button android:id="@+id/btn_origin" android:layout_height="40dp" android:layout_width="0dp" android:textColor="#fff" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" android:layout_weight="1" android:background="@xml/btn_blue" android:text="初始化"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:orientation="horizontal"> <Button android:id="@+id/btn_delete" android:layout_height="40dp" android:layout_width="0dp" android:layout_marginLeft="4dp" android:text="清除保存文件" android:textColor="#fff" android:background="@xml/btn_blue" android:layout_weight="1"/> <Button android:id="@+id/btn_see" android:layout_height="40dp" android:layout_width="0dp" android:layout_marginLeft="4dp" android:layout_weight="1" android:textColor="#fff" android:layout_marginRight="4dp" android:background="@xml/btn_blue" android:text="查看保存文件"/> </LinearLayout> </LinearLayout>

java

package com.example.mpaint; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; import android.content.ContentUris; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.drawable.Drawable; 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.view.Window; import android.widget.Button; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnSeekBarChangeListener,OnClickListener { private ImageView iv_change; private SeekBar sb_alpha, sb_red, sb_green, sb_blue; private TextView tv_dispaly; private float a = 0f, r = 0f, g = 0f, b = 0f; private String Path; private Button btn_photo, btn_picture, btn_save, btn_origin, btn_delete, btn_see; private Bitmap photo = null, photoorigin; private File mCurrentPhotoFile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); // 新建图片存储的目录 Path = Environment.getExternalStorageDirectory().toString() + "/mFilter"; File file = new File(Path); if (!file.exists()) { file.mkdir(); } iv_change = (ImageView) findViewById(R.id.iv_change); tv_dispaly = (TextView) findViewById(R.id.tv_display); tv_dispaly.setText("a: " + String.valueOf((a)) + "% " + "r: " + String.valueOf((r)) + " " + "g: " + String.valueOf((g)) + +" " + "b: " + String.valueOf((b))); // 从资源文件中获得图片 photoorigin = BitmapFactory.decodeResource(getResources(), R.drawable.origin); // 初始化进度条 initSeek(); // 初始化按钮 initButton(); } private void initButton() { btn_save = (Button) findViewById(R.id.btn_save); btn_save.setOnClickListener(this); btn_photo = (Button) findViewById(R.id.btn_photo); btn_photo.setOnClickListener(this); btn_picture = (Button) findViewById(R.id.btn_picture); btn_picture.setOnClickListener(this); btn_origin = (Button) findViewById(R.id.btn_origin); btn_origin.setOnClickListener(this); btn_delete = (Button) findViewById(R.id.btn_delete); btn_delete.setOnClickListener(this); btn_see = (Button) findViewById(R.id.btn_see); btn_see.setOnClickListener(this); } private void initSeek() { sb_alpha = (SeekBar) findViewById(R.id.sb_alpha); sb_alpha.setOnSeekBarChangeListener(this); sb_red = (SeekBar) findViewById(R.id.sb_red); sb_red.setOnSeekBarChangeListener(this); // 设置进度条默许位置 sb_red.setProgress(50); sb_green = (SeekBar) findViewById(R.id.sb_green); sb_green.setOnSeekBarChangeListener(this); sb_green.setProgress(50); sb_blue = (SeekBar) findViewById(R.id.sb_blue); sb_blue.setOnSeekBarChangeListener(this); sb_blue.setProgress(50); } // 重写OnSeekBarChangeListener @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { switch (seekBar.getId()) { case R.id.sb_alpha: a = (float) (progress / 100.0); break; case R.id.sb_red: r = (float) ((progress - 50) / 5.0); break; case R.id.sb_green: g = (float) ((progress - 50) / 5.0); break; case R.id.sb_blue: b = (float) ((progress - 50) / 5.0); break; default: break; } setArgb(1 - a, r + 1, g + 1, b + 1); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } public void setArgb(float alpha, float red, float green, float blue) { tv_dispaly.setText("a: " + String.valueOf((a * 100)) + "% " + "r: " + String.valueOf((r)) + " " + "g: " + String.valueOf((g)) + " " + "b: " + String.valueOf((b))); // 新建色彩矩阵 ColorMatrix mColorMatrix = new ColorMatrix(new float[] { red, 0, 0, 0, 0, 0, green, 0, 0, 0, 0, 0, blue, 0, 0, 0, 0, 0, alpha, 0 }); // 使用色彩矩阵过滤图片 iv_change.getDrawable().setColorFilter( new ColorMatrixColorFilter(mColorMatrix)); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_origin: a = 0f; r = 0f; g = 0f; b = 0f; tv_dispaly.setText("a: " + String.valueOf((a)) + "% " + "r: " + String.valueOf((r)) + " " + "g: " + String.valueOf((g)) + " " + "b: " + String.valueOf((b))); sb_alpha.setProgress(0); sb_red.setProgress(50); sb_green.setProgress(50); sb_blue.setProgress(50); // 初始化图片 if (photo != null) { iv_change.setBackgroundColor(Color.parseColor("#00000000")); iv_change.setImageBitmap(photo); } else { iv_change.setBackgroundColor(Color.parseColor("#00000000")); iv_change.setImageBitmap(photoorigin); } break; case R.id.btn_save: saveImageView(); break; case R.id.btn_photo: takephoto(); break; case R.id.btn_picture: takepicture(); break; case R.id.btn_see: see(); break; case R.id.btn_delete: new AlertDialog.Builder(MainActivity.this) .setTitle("提示信息") .setMessage("是不是删除路径" + Path + "下的所有文件" + "?") .setNegativeButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { delete(); dialog.dismiss(); // 判断是不是完全删除 File file = new File(Path); File[] childFile = file.listFiles(); if (childFile.length == 0) { Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_LONG) .show(); } else { Toast.makeText(MainActivity.this, "删除失败", Toast.LENGTH_LONG) .show(); } } }) .setPositiveButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); break; default: break; } } // 查看文件 private void see() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); File file = new File(Path); intent.setDataAndType(Uri.fromFile(file), "*/*"); startActivityForResult(intent, 2); } private void delete() { File file = new File(Path); File[] childFile = file.listFiles(); for (File file2 : childFile) { file2.delete(); } } private void takepicture() { // 相册 Intent intentPick = new Intent(Intent.ACTION_PICK, null); intentPick.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intentPick, 0); } private void takephoto() { // 照相 mCurrentPhotoFile = new File(Path, "temp.jpg"); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mCurrentPhotoFile)); startActivityForResult(intent, 1); } private void saveImageView() { // 自定义文件名 final String path = Path + "/" + getNowDateTime("yyyyMMddHHmmss") + ".jpg"; new AlertDialog.Builder(MainActivity.this) .setTitle("提示信息") .setMessage("是不是将文件保存到" + Path + "?") .setNegativeButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 设置view可缓存.然后以bitmap获得view的缓存 iv_change.setDrawingCacheEnabled(true); Bitmap photofinally = iv_change.getDrawingCache(); try { BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(path)); // 将bitmap紧缩存储,100表示不紧缩 photofinally.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.flush(); bos.close(); bos = null; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } iv_change.setDrawingCacheEnabled(false); File file = new File(path); dialog.dismiss(); if (file.exists()) { Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this, "保存失败", Toast.LENGTH_LONG).show(); } } }) .setPositiveButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); } public static String getNowDateTime(String format) { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat(format);// "yyyyMMdd" String dateString = formatter.format(currentTime); return dateString; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 0: if (data != null) { // 相册uri获得 Uri uri = data.getData(); // 同享相机获得的数据 ContentResolver cr = this.getContentResolver(); try { // 回收bitmap if (photo != null && !photo.isRecycled()) { photo.recycle(); System.gc(); } // 将好;获得的数据编码成bitmap photo = BitmapFactory.decodeStream(cr.openInputStream(uri)); } catch (Exception e) { e.printStackTrace(); } iv_change.setBackgroundColor(Color.parseColor("#00000000")); iv_change.setImageBitmap(photo); } break; case 1: // resultCode=⑴为成功 if (resultCode == -1) { ContentResolver cr = getContentResolver(); Uri fileUri = Uri.fromFile(mCurrentPhotoFile); // 刷新单个文件 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, fileUri)); // 刷新sd卡 // sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, // dirUri)); try { if (photo != null && !photo.isRecycled()) { photo.recycle(); System.gc(); } // 通过uri读取资源 photo = BitmapFactory.decodeStream(cr .openInputStream(fileUri)); } catch (Exception e) { e.printStackTrace(); } iv_change.setBackgroundColor(Color.parseColor("#00000000")); iv_change.setImageBitmap(photo); } break; case 2: break; default: break; } super.onActivityResult(requestCode, resultCode, data); } }

剪裁图片

private void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 320); intent.putExtra("outputY", 320); //返回数据 intent.putExtra("return-data", true); startActivityForResult(intent, REQUEST_CODE_HEAD); } //处理onActivityResult private Bitmap saveImageView(String path, Intent data) throws Exception { Bitmap photo = null; //获得绑定数据包 Bundle extras = data.getExtras(); if (extras != null) { //获得绑定数据 photo = extras.getParcelable("data"); BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(path)); photo.compress(Bitmap.CompressFormat.JPEG, 60, bos); bos.flush(); bos.close(); bos = null; } return photo; }
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐