博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拍照 和 选择相册 设置背景图片
阅读量:5943 次
发布时间:2019-06-19

本文共 5339 字,大约阅读时间需要 17 分钟。

1 package com.testCarema.android;  2   3 import android.app.Activity;  4 import android.app.AlertDialog;  5 import android.content.ContentResolver;  6 import android.content.DialogInterface;  7 import android.content.Intent;  8 import android.graphics.Bitmap;  9 import android.graphics.BitmapFactory; 10 import android.net.Uri; 11 import android.os.Bundle; 12 import android.view.View; 13 import android.view.View.OnClickListener; 14 import android.widget.ImageView; 15  16 import java.io.ByteArrayOutputStream; 17 import java.io.InputStream; 18  19 public class testCarema extends Activity { 20  21     private ImageView imageView; 22     private OnClickListener imgViewListener; 23     private Bitmap myBitmap; 24     private byte[] mContent; 25  26     @Override 27     public void onCreate(Bundle savedInstanceState) { 28         super.onCreate(savedInstanceState); 29         setContentView(R.layout.main); 30         imageView = (ImageView) findViewById(R.id.imageView); 31         imgViewListener = new OnClickListener() { 32             public void onClick(View v) { 33                 final CharSequence[] items = {"相册", "拍照"}; 34                 AlertDialog dlg = new AlertDialog.Builder(testCarema.this) 35                         .setTitle("选择图片") 36                         .setItems(items, new DialogInterface.OnClickListener() { 37                             public void onClick(DialogInterface dialog, int item) { 38                                 // 这里item是根据选择的方式, 39                                 // 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法 40                                 if (item == 1) { 41                                     Intent getImageByCamera = new Intent( 42                                             "android.media.action.IMAGE_CAPTURE"); 43                                     startActivityForResult(getImageByCamera, 1); 44                                 } else { 45                                     Intent getImage = new Intent( 46                                             Intent.ACTION_GET_CONTENT); 47                                     getImage.addCategory(Intent.CATEGORY_OPENABLE); 48                                     getImage.setType("image/jpeg"); 49                                     startActivityForResult(getImage, 0); 50                                 } 51                             } 52                         }).create(); 53                 dlg.show(); 54             } 55         }; 56         // 给imageView控件绑定点点击监听器 57         imageView.setOnClickListener(imgViewListener); 58  59     } 60  61     @Override 62     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 63         // TODO Auto-generated method stub 64         super.onActivityResult(requestCode, resultCode, data); 65  66         ContentResolver resolver = getContentResolver(); 67         /** 68          * 因为两种方式都用到了startActivityForResult方法, 这个方法执行完后都会执行onActivityResult方法, 69          * 所以为了区别到底选择了那个方式获取图片要进行判断, 70          * 这里的requestCode跟startActivityForResult里面第二个参数对应 71          */ 72         if (requestCode == 0) { 73             try { 74                 // 获得图片的uri 75                 Uri originalUri = data.getData(); 76                 // 将图片内容解析成字节数组 77                 mContent = readStream(resolver.openInputStream(Uri 78                         .parse(originalUri.toString()))); 79                 // 将字节数组转换为ImageView可调用的Bitmap对象 80                 myBitmap = getPicFromBytes(mContent, null); 81                 // //把得到的图片绑定在控件上显示 82                 imageView.setImageBitmap(myBitmap); 83             } catch (Exception e) { 84                 System.out.println(e.getMessage()); 85             } 86  87         } else if (requestCode == 1) { 88             try { 89                 super.onActivityResult(requestCode, resultCode, data); 90                 Bundle extras = data.getExtras(); 91                 myBitmap = (Bitmap) extras.get("data"); 92                 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 93                 myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 94                 mContent = baos.toByteArray(); 95             } catch (Exception e) { 96                 // TODO Auto-generated catch block 97                 e.printStackTrace(); 98             } 99             // 把得到的图片绑定在控件上显示100             imageView.setImageBitmap(myBitmap);101         }102     }103 104     public static Bitmap getPicFromBytes(byte[] bytes,105                                          BitmapFactory.Options opts) {106         if (bytes != null)107             if (opts != null)108                 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,109                         opts);110             else111                 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);112         return null;113     }114 115     public static byte[] readStream(InputStream inStream) throws Exception {116         byte[] buffer = new byte[1024];117         int len = -1;118         ByteArrayOutputStream outStream = new ByteArrayOutputStream();119         while ((len = inStream.read(buffer)) != -1) {120             outStream.write(buffer, 0, len);121         }122         byte[] data = outStream.toByteArray();123         outStream.close();124         inStream.close();125         return data;126 127     }128 129 }

 

转载地址:http://fuwxx.baihongyu.com/

你可能感兴趣的文章
计算机网络术语总结4
查看>>
新手小白 python之路 Day3 (string 常用方法)
查看>>
soapUI的简单使用(webservice接口功能测试)
查看>>
框架 Hibernate
查看>>
python-while循环
查看>>
手机端上传图片及java后台接收和ajaxForm提交
查看>>
【MSDN 目录】C#编程指南、C#教程、ASP.NET参考、ASP.NET 4、.NET Framework类库
查看>>
jquery 怎么触发select的change事件
查看>>
angularjs指令(二)
查看>>
<气场>读书笔记
查看>>
领域驱动设计,构建简单的新闻系统,20分钟够吗?
查看>>
web安全问题分析与防御总结
查看>>
React 组件通信之 React context
查看>>
Linux下通过配置Crontab实现进程守护
查看>>
ios 打包上传Appstore 时报的错误 90101 90149
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
密码概述
查看>>
autoconf,automake,libtool
查看>>
jQuery的技巧01
查看>>
基于泛型实现的ibatis通用分页查询
查看>>