閱讀89 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android 調用相冊 拍照 實現係統控件縮放 切割圖片

https://blog.csdn.net/xys289187120/article/details/6575830

android 下如果做處理圖片的軟件 可以調用係統的控件 實現縮放切割圖片 非常好的效果 今天寫了一個demo分享給大家 嘿嘿。

  1. package cn.m15.test;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.File;
  4. import android.app.Activity;
  5. import android.content.Intent;
  6. import android.graphics.Bitmap;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.os.Environment;
  10. import android.provider.MediaStore;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.widget.Button;
  14. import android.widget.ImageView;
  15. public class testActivity extends Activity {
  16. public static final int NONE = 0;
  17. public static final int PHOTOHRAPH = 1;// 拍照
  18. public static final int PHOTOZOOM = 2; // 縮放
  19. public static final int PHOTORESOULT = 3;// 結果
  20. public static final String IMAGE_UNSPECIFIED = "image/*";
  21. ImageView imageView = null;
  22. Button button0 = null;
  23. Button button1 = null;
  24. @Override
  25. public void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.main);
  28. imageView = (ImageView) findViewById(R.id.imageID);
  29. button0 = (Button) findViewById(R.id.btn_01);
  30. button1 = (Button) findViewById(R.id.btn_02);
  31. button0.setOnClickListener(new OnClickListener() {
  32. @Override
  33. public void onClick(View v) {
  34. Intent intent = new Intent(Intent.ACTION_PICK, null);
  35. intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
  36. startActivityForResult(intent, PHOTOZOOM);
  37. }
  38. });
  39. button1.setOnClickListener(new OnClickListener() {
  40. @Override
  41. public void onClick(View v) {
  42. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  43. intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));
  44. startActivityForResult(intent, PHOTOHRAPH);
  45. }
  46. });
  47. }
  48. @Override
  49. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  50. if (resultCode == NONE)
  51. return;
  52. // 拍照
  53. if (requestCode == PHOTOHRAPH) {
  54. //設置文件保存路徑這裏放在跟目錄下
  55. File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
  56. startPhotoZoom(Uri.fromFile(picture));
  57. }
  58. if (data == null)
  59. return;
  60. // 讀取相冊縮放圖片
  61. if (requestCode == PHOTOZOOM) {
  62. startPhotoZoom(data.getData());
  63. }
  64. // 處理結果
  65. if (requestCode == PHOTORESOULT) {
  66. Bundle extras = data.getExtras();
  67. if (extras != null) {
  68. Bitmap photo = extras.getParcelable("data");
  69. ByteArrayOutputStream stream = new ByteArrayOutputStream();
  70. photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)壓縮文件
  71. imageView.setImageBitmap(photo);
  72. }
  73. }
  74. super.onActivityResult(requestCode, resultCode, data);
  75. }
  76. public void startPhotoZoom(Uri uri) {
  77. Intent intent = new Intent("com.android.camera.action.CROP");
  78. intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
  79. intent.putExtra("crop", "true");
  80. // aspectX aspectY 是寬高的比例
  81. intent.putExtra("aspectX", 1);
  82. intent.putExtra("aspectY", 1);
  83. // outputX outputY 是裁剪圖片寬高
  84. intent.putExtra("outputX", 64);
  85. intent.putExtra("outputY", 64);
  86. intent.putExtra("return-data", true);
  87. startActivityForResult(intent, PHOTORESOULT);
  88. }
  89. }
package cn.m15.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.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class testActivity extends Activity { public static final int NONE = 0; public static final int PHOTOHRAPH = 1;// 拍照 public static final int PHOTOZOOM = 2; // 縮放 public static final int PHOTORESOULT = 3;// 結果 public static final String IMAGE_UNSPECIFIED = "image/*"; ImageView imageView = null; Button button0 = null; Button button1 = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView = (ImageView) findViewById(R.id.imageID); button0 = (Button) findViewById(R.id.btn_01); button1 = (Button) findViewById(R.id.btn_02); button0.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); startActivityForResult(intent, PHOTOZOOM); } }); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg"))); startActivityForResult(intent, PHOTOHRAPH); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == NONE) return; // 拍照 if (requestCode == PHOTOHRAPH) { //設置文件保存路徑這裏放在跟目錄下 File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg"); startPhotoZoom(Uri.fromFile(picture)); } if (data == null) return; // 讀取相冊縮放圖片 if (requestCode == PHOTOZOOM) { startPhotoZoom(data.getData()); } // 處理結果 if (requestCode == PHOTORESOULT) { 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)壓縮文件 imageView.setImageBitmap(photo); } } super.onActivityResult(requestCode, resultCode, data); } 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", 64); intent.putExtra("outputY", 64); intent.putExtra("return-data", true); startActivityForResult(intent, PHOTORESOULT); } }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <TextView android:layout_width="fill_parent"
  6. android:layout_height="wrap_content" android:text="@string/hello" />
  7. <ImageView android:id="@+id/imageID"
  8. android:adjustViewBounds="true" android:maxWidth="50dip"
  9. android:maxHeight="50dip" android:layout_width="wrap_content"
  10. android:layout_height="wrap_content" />
  11. <Button android:id="@+id/btn_01" android:layout_height="50dip"
  12. android:text="相冊" android:layout_width="150dip"/>
  13. <Button android:id="@+id/btn_02" android:layout_height="50dip"
  14. android:text="拍照" android:layout_width="150dip"/>
  15. </LinearLayout>


最後更新:2017-04-02 16:47:36

  上一篇:go Android中使用Animation實現控件的動畫效果以及Interpolator和AnimationListener的使用
  下一篇:go android中在Button任意位置加圖片效果