Android调用相机程序和图片处理程序获得原图并且进行图片处理

分类: Android开发 1376人阅读 评论(3) 收藏 举报 android Android 图片处理 照相机

这篇文章主要介绍的是调用相机程序获得图片,调用Android操作系统自带的图片处理程序处理图片然后返回到我们的程序。

先看看布局文件:

[html] view plain copy print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <Button
  7. android:id="@+id/button1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="Button"/>
  11. <ImageView
  12. android:id="@+id/imageView1"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"/>
  15. </LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >        <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Button" />    <ImageView        android:id="@+id/imageView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

向布局中加入了一个Button和一个ImageView。

在Button的OnClick方法中启动相机程序,让用户选择使用哪个相机,代码如下:

[java] view plain copy print ?
  1. @Override
  2. publicvoidonClick(Viewv){
  3. //doTakePhoto();
  4. Filefos=null;
  5. try{
  6. fos=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");
  7. }catch(Exceptione){
  8. e.printStackTrace();
  9. }
  10. Uriu=Uri.fromFile(fos);
  11. Intenti=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
  12. i.putExtra(MediaStore.Images.Media.ORIENTATION,0);
  13. i.putExtra(MediaStore.EXTRA_OUTPUT,u);
  14. this.startActivityForResult(i,9);
  15. }
@Overridepublic void onClick(View v) {//doTakePhoto();File fos=null;try {fos=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");} catch (Exception e) {e.printStackTrace();}Uri u=Uri.fromFile(fos);Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);i.putExtra(MediaStore.Images.Media.ORIENTATION, 0);i.putExtra(MediaStore.EXTRA_OUTPUT, u);this.startActivityForResult(i, 9);} 

效果如下:

Android调用相机程序和图片处理程序获得原图并且进行图片处理_第1张图片

向Intent中放入一些信息,指定保存原图,额外的保存在我指定的地址。使用this.startActivityForresult();传入intent对象和请求的值。


覆盖父类的onActivityResult方法,当其他Activity结束之后返回到本Activity。

[java] view plain copy print ?
  1. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
  2. if(resultCode==RESULT_OK)
  3. {
  4. if(requestCode==9)
  5. {
  6. Filebb=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");
  7. Intenti=newIntent("com.android.camera.action.CROP");
  8. i.setType("image/*");
  9. //i.putExtra("data",bb);
  10. i.setDataAndType(Uri.fromFile(bb),"image/jpeg");
  11. i.putExtra("crop","true");
  12. i.putExtra("aspectX",1);
  13. i.putExtra("aspectY",1);
  14. i.putExtra("outputX",500);
  15. i.putExtra("outputY",500);
  16. i.putExtra("return-data",true);
  17. this.startActivityForResult(i,7);
  18. }
  19. if(requestCode==7)
  20. {
  21. Bitmapbb=data.getParcelableExtra("data");
  22. i.setImageBitmap(bb);
  23. }
  24. }
  25. }
protected void onActivityResult(int requestCode, int resultCode, Intent data) {                        if(resultCode==RESULT_OK)        {        if(requestCode==9)        {                File  bb=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");                Intent i=new Intent("com.android.camera.action.CROP");        i.setType("image/*");                        //i.putExtra("data", bb);        i.setDataAndType(Uri.fromFile(bb), "image/jpeg");                i.putExtra("crop", "true");                i.putExtra("aspectX", 1);                i.putExtra("aspectY", 1);                i.putExtra("outputX", 500);                i.putExtra("outputY", 500);                i.putExtra("return-data", true);                                this.startActivityForResult(i, 7);        }                if(requestCode==7)        {        Bitmap bb=data.getParcelableExtra("data");        i.setImageBitmap(bb);                }        }                                }

通过返回的请求值,我就知道是从哪个Activity返回来的,如果是从相机程序返回,那就获得拍照之后的数据,跳到图片处理程序。如果是从图片处理程序回来的,就获得返回的数据,显示处理之后的图片。


最后不要忘了在程序退出的时候删除在SDcard上没用的图片。

[java] view plain copy print ?
  1. @Override
  2. protectedvoidonDestroy(){
  3. super.onDestroy();
  4. Filef=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");
  5. if(f.exists())
  6. {
  7. f.delete();
  8. }
  9. }
@Overrideprotected void onDestroy() {super.onDestroy();File f=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");if(f.exists()){f.delete();}} 

好了,就这样。

下面贴出运行效果图:

Android调用相机程序和图片处理程序获得原图并且进行图片处理_第2张图片




下面是本Activity的全部代码:

[java] view plain copy print ?
  1. packagecom.zhycheng.takephoto;
  2. importjava.io.File;
  3. importjava.io.FileNotFoundException;
  4. importjava.io.FileOutputStream;
  5. importandroid.app.Activity;
  6. importandroid.content.Intent;
  7. importandroid.graphics.Bitmap;
  8. importandroid.graphics.BitmapFactory;
  9. importandroid.net.Uri;
  10. importandroid.os.Bundle;
  11. importandroid.os.Environment;
  12. importandroid.provider.MediaStore;
  13. importandroid.view.View;
  14. importandroid.view.View.OnClickListener;
  15. importandroid.widget.Button;
  16. importandroid.widget.ImageView;
  17. publicclassMainActivityextendsActivityimplementsOnClickListener{
  18. StringlocalTempImgFileName;
  19. StringlocalTempImgDir="TestCamera";
  20. Buttonb;
  21. ImageViewi;
  22. @Override
  23. publicvoidonCreate(BundlesavedInstanceState){
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.main);
  26. b=(Button)findViewById(R.id.button1);
  27. b.setOnClickListener(this);
  28. i=(ImageView)findViewById(R.id.imageView1);
  29. }
  30. @Override
  31. publicvoidonClick(Viewv){
  32. //doTakePhoto();
  33. Filefos=null;
  34. try{
  35. fos=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");
  36. }catch(Exceptione){
  37. e.printStackTrace();
  38. }
  39. Uriu=Uri.fromFile(fos);
  40. Intenti=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
  41. i.putExtra(MediaStore.Images.Media.ORIENTATION,0);
  42. i.putExtra(MediaStore.EXTRA_OUTPUT,u);
  43. this.startActivityForResult(i,9);
  44. }
  45. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
  46. if(resultCode==RESULT_OK)
  47. {
  48. if(requestCode==9)
  49. {
  50. Filebb=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");
  51. Intenti=newIntent("com.android.camera.action.CROP");
  52. i.setType("image/*");
  53. //i.putExtra("data",bb);
  54. i.setDataAndType(Uri.fromFile(bb),"image/jpeg");
  55. i.putExtra("crop","true");
  56. i.putExtra("aspectX",1);
  57. i.putExtra("aspectY",1);
  58. i.putExtra("outputX",500);
  59. i.putExtra("outputY",500);
  60. i.putExtra("return-data",true);
  61. this.startActivityForResult(i,7);
  62. }
  63. if(requestCode==7)
  64. {
  65. Bitmapbb=data.getParcelableExtra("data");
  66. i.setImageBitmap(bb);
  67. }
  68. }
  69. }
  70. @Override
  71. protectedvoidonDestroy(){
  72. super.onDestroy();
  73. Filef=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");
  74. if(f.exists())
  75. {
  76. f.delete();
  77. }
  78. }
  79. }
package com.zhycheng.takephoto;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;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 {String localTempImgFileName;String localTempImgDir="TestCamera";Button b;ImageView i;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        b=(Button) findViewById(R.id.button1);        b.setOnClickListener(this);        i=(ImageView) findViewById(R.id.imageView1);    }    @Overridepublic void onClick(View v) {//doTakePhoto();File fos=null;try {fos=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");} catch (Exception e) {e.printStackTrace();}Uri u=Uri.fromFile(fos);Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);i.putExtra(MediaStore.Images.Media.ORIENTATION, 0);i.putExtra(MediaStore.EXTRA_OUTPUT, u);this.startActivityForResult(i, 9);} protected void onActivityResult(int requestCode, int resultCode, Intent data) {                        if(resultCode==RESULT_OK)        {        if(requestCode==9)        {                File  bb=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");                Intent i=new Intent("com.android.camera.action.CROP");        i.setType("image/*");                        //i.putExtra("data", bb);        i.setDataAndType(Uri.fromFile(bb), "image/jpeg");                i.putExtra("crop", "true");                i.putExtra("aspectX", 1);                i.putExtra("aspectY", 1);                i.putExtra("outputX", 500);                i.putExtra("outputY", 500);                i.putExtra("return-data", true);                                this.startActivityForResult(i, 7);        }                if(requestCode==7)        {        Bitmap bb=data.getParcelableExtra("data");        i.setImageBitmap(bb);                }        }                                }@Overrideprotected void onDestroy() {super.onDestroy(); File f=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"zhycheng.jpg");if(f.exists()){f.delete();}} }

工程代码下载: TakePhoto.zip

更多相关文章

  1. Android修行之路——Android程序设计基础(二)
  2. Android应用程序的数据存放目录 路径
  3. 关于程序中Activity若干问题知识点总结
  4. 如何使Android应用程序获取系统权限
  5. android客户端程序访问服务器端webservice,几篇不错的文章!
  6. Android工具之Hierarchy Viewer--分析应用程序UI布局
  7. 使用Eclipse+ADT开发android 1.5程序

随机推荐

  1. 多个dex文件定义了Landroid/支持/v13/app
  2. 在app引擎端点的启动时执行代码
  3. android:WALLPAPER_CHANGED不适用于三星Ga
  4. Android NFC 近场通讯开发全解
  5. 通过不在android游标中工作的顺序
  6. Android全屏模式,沉浸模式。粘性沉浸模式
  7. 制作动态表格(最好的方法)
  8. Android短彩信源码解析-短信发送流程(三)
  9. android app启动就闪退怎么办?
  10. 如何设计数据库模型来记录客户的历史活动