android获取本地图片或拍照图片

标签: android 图片 拍照 | 发表时间:2013-02-20 13:31 | 作者:Wang6279026
出处:http://blog.csdn.net

直接上代码,代码中注释很清楚,本人觉得这个东西google本来自己就应该集成好,直接一个方法调用最好,因为这个用的比较多,一般的android手机中交流的软件基本上都需要这个东西。

package com.example.photodemo;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
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;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ImageView image;// 要显示选择的图片
	private Bitmap photo;// 选择好的图片的bitmap形式
	
	private Button button1;// 图片
	private Button button2;// 拍照
	private static final int PIC = 1;// 图片
	private static final int PHO = 2;// 照相

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		image = (ImageView) findViewById(R.id.imageView1);
		button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setType("image/*");
				intent.setAction(Intent.ACTION_GET_CONTENT);
				startActivityForResult(intent, PIC);
			}
		});
		// 拍照上传
		button2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				String state = Environment.getExternalStorageState();
				if (state.equals(Environment.MEDIA_MOUNTED)) {// 如果存储卡可用
					Intent intent = new Intent(
							"android.media.action.IMAGE_CAPTURE");
					startActivityForResult(intent, PHO);
				} else {
					Toast.makeText(getApplicationContext(), "存储卡不可用",
							Toast.LENGTH_LONG).show();
				}
			}
		});
	}

	/**
	 * 取得回传的数据
	 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (data != null && requestCode == PHO) { // 拍照上传时
			Bundle extras = data.getExtras();
			if (extras != null) {
				photo = (Bitmap) extras.get("data");
				image.setImageBitmap(photo);
			} else {
				Toast.makeText(MainActivity.this, "未找到图片", Toast.LENGTH_LONG)
						.show();
			}
		}
		if (resultCode == Activity.RESULT_OK) {
			Uri uri = data.getData();// 当选择的图片不为空的话,在获取到图片的途径
			try {
				String[] pojo = { MediaStore.Images.Media.DATA };
				Cursor cursor = managedQuery(uri, pojo, null, null, null);
				if (cursor != null) {
					ContentResolver cr = this.getContentResolver();
					int colunm_index = cursor
							.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
					cursor.moveToFirst();
					String path = cursor.getString(colunm_index);
					/***
					 * 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,
					 * 这样的话,我们判断文件的后缀名 如果是图片格式的话,那么才可以
					 */
					if (path.endsWith("jpg") || path.endsWith("png")) {
						photo = BitmapFactory.decodeStream(cr
								.openInputStream(uri));
						image.setImageBitmap(photo);
					} else {
					}
				} else {
				}
			} catch (Exception e) {
			}
		}
	}
}

布局也顺便写一下吧

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选择相片" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拍照相片" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:ems="10"
        android:inputType="textMultiLine" >

        <requestFocus />
    </EditText>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

</LinearLayout>


作者:Wang6279026 发表于2013-2-20 21:31:21 原文链接
阅读:71 评论:0 查看评论

相关 [android 图片 拍照] 推荐:

android获取本地图片或拍照图片

- - CSDN博客移动开发推荐文章
直接上代码,代码中注释很清楚,本人觉得这个东西google本来自己就应该集成好,直接一个方法调用最好,因为这个用的比较多,一般的android手机中交流的软件基本上都需要这个东西. private ImageView image;// 要显示选择的图片. private Bitmap photo;// 选择好的图片的bitmap形式.

Android拍照和图片处理类应用盘点

- 青椒 - 互联网的那点事
智能手机上的照相和图片处理程序越来越多,要不是光学元件大小限制,现在的智能手机大有取代家庭卡片相机的可能,毕竟手机可以拍照、编辑、分享一条龙搞定,又是随身携带. 上期介绍了iPhone众多拍照摄影集锦,Android做为Google旗下一款十分出色的移动平台,由于完全开放,其应用商店里优秀的拍照摄影应用数量也得到很大提升.

android 端拍照并运用Tesseract OCR 识别图片中字符

- - 移动开发 - ITeye博客
我上传了一个android studio环境下的例子,可以拍照或者选择图库中图片进行识别. 这个链接()包括一份工程源代码和 两个压缩包(语言包),一个是中文汉字,一个是英文. 必须现在手机内部存储根目录. (在程序中获取这个字符串就明白这个目录是什么了Environment.getExternalStorageDirectory()).

android 比较靠谱的选择图片以及拍照,保存图片

- - ITeye博客
在开发项目中用到这个功能,之前就按照学过的拍照和选择照片的功能,所以也没在意就写了上去,可是最后发现在有些机子里面获取到的数据时空的,所以会导致程序崩溃的情况出现,网上找了很多例子大多都是一样的,还是有问题,后来就查看跟踪了拍照后返回的数据写了下面的代码相对大多数机子是可行的,经测试还是比较靠谱的,包括拍照后图片翻转了90度问题都没问题.

android截取屏幕图片

- - BlogJava-首页技术区
                mButton.setText("截屏次数:"+mPrintNum);.         //1.构建Bitmap   .         //2.获取屏幕   .         //3.保存Bitmap    .             //文件   .                 Toast.makeText(this, "截屏文件已保存至SDCard/PrintScreenDemo/ScreenImage/下", Toast.LENGTH_LONG).show();   .

android图片压缩方法

- - CSDN博客移动开发推荐文章
第一:我们先看下质量压缩方法.         image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  .         while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩         .

HTML5调用android手机摄像头拍照

- - 移动开发 - ITeye博客
HTML5 The Media Capture API提供了对摄像头的可编程访问,用户可以直接用getUserMedia获得摄像头提供的视频流. 但实际上用html5调用手机摄像头存在很多问题:. 1)谷歌的发布的Chrome到了21版本后,才新增了一个用于高质量视频音频通讯的getUserMedia API,该API允许Web应用程序访问摄像头和麦克风,其他手机浏览器只有opera支持html5调用本地拍照功能.

你需要知道的Android拍照适配方案

- - 移动开发 - ITeye博客
说起调用系统相机来拍照的功能,大家肯定不陌生,现在所有应用都具备这个功能. 例如最基本的,用户拍照上传头像. Android开发的孩纸都知道,碎片化给拍照这个功能的实现带来挺多头疼的问题. 所以,我决定写写一些网上不多见但又经常听到童鞋们吐槽的问题. Android 程序上实现拍照功能的方式分为两种:第一种是利用相机的 API 来自定义相机,第二种是利用 Intent 调用系统指定的相机拍照.

android 比较靠谱的图片压缩

- - ITeye博客
第一:我们先看下质量压缩方法:. image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中. //循环判断如果压缩后图片是否大于100kb,大于继续压缩. baos.reset();//重置baos即清空baos.