Android 调用相册 拍照 实现系统控件缩放 切割图片

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

android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 嘿嘿。

[java] view plaincopyprint?

  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);
}
}

[html] view plaincopyprint?

  1. <?xml
    version="1.0"
    encoding="utf-8"?>
  2. <LinearLayout
    xmlns:android="http://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>
时间: 2024-09-20 08:10:13

Android 调用相册 拍照 实现系统控件缩放 切割图片的相关文章

Android控件系列之相册Gallery&amp;Adapter适配器入门&amp;控件缩放动画入门

学习目的: 1.掌握在Android中如何建立Gallery 2.初步理解Android适配器的原理 3.实现简单的控件缩放动画 简介: 1.Gallery是Android内置的一个控件,它可以继承若干图片甚至是其他控件 2.Gallery自带了滚动播放图片功能,此功能您可以通过模拟器拖曳鼠标或者在手机上拖拽验证 3.Gallery需要适配器来传输数据,如果您不熟悉"适配器设计模式",可以将适配器理解为某厂商的电脑适配器,只要这个厂商的所有型号的电脑都能使用该适配器,也就是说,设计新型

Android调用手机拍照功能的方法_Android

本文实例讲述了Android调用手机拍照功能的方法.分享给大家供大家参考.具体如下: 一.main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" andr

Android调用手机拍照功能的方法

本文实例讲述了Android调用手机拍照功能的方法.分享给大家供大家参考.具体如下: 一.main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" andr

Android中日期与时间设置控件用法实例_Android

本文实例讲述了Android中日期与时间设置控件用法.分享给大家供大家参考.具体如下: 1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码: 页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextView控件,用于显示设置后的系统时间 main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x

Android中日期与时间设置控件用法实例

本文实例讲述了Android中日期与时间设置控件用法.分享给大家供大家参考.具体如下: 1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码: 页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextView控件,用于显示设置后的系统时间 main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x

Android绑定添加了注解的控件,及其事件方法

  Android绑定添加了注解的控件,及其事件方法.根据成员方法的注解进行绑定,根据成员变量的注解进行绑定,设置事件的监听器,对控件赋值,注意:它必须在activity调用了setContentView之后调用.

句柄-js调用自己写的ActiveX控件 在服务端都OK

问题描述 js调用自己写的ActiveX控件 在服务端都OK js调用自己写的ActiveX控件 在服务端都OK 到客户端能安装注册就是找不到句柄 什么情况 在线等 解决方案 那你要看你的activex是否安装正确,已经安装到系统了吗? 这个需要管理员权限. regsvr32.exe 注册 解决方案二: 对的啊 都是成功的 regedit 也能查看到

android中最好的瀑布流控件PinterestLikeAdapterView

之前我们介绍过一个开源的瀑布流控件StaggeredGridView ,但是真正使用过后才发现有一个致命的缺陷,那就是在显示数目较多的图片时,上滑有时会很困难.但是今天介绍的瀑布流控件PinterestLikeAdapterView则没有这样的问题. 项目地址:https://github.com/GDG-Korea/PinterestLikeAdapterView 使用方法类似于ListView下面是我使用该控件实现一个显示系统图片的简单应用: xml中: <?xml version="

Android中Spinner(下拉框)控件的使用详解_Android

android给我们提供了一个spinner控件,这个控件主要就是一个列表,那么我们就来说说这个控件吧,这个控件在以前的也看见过,但今天还是从新介绍一遍吧. Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器.Spinner是View类得一个子类. 1.效果图 2.创建页面文件(main.xml) <Spinner android:id="@+id/spinner1" and