`
as11051105
  • 浏览: 60422 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

android调用系统照相机返回到页面,保存到本地和把图片转换成字符串

阅读更多
本程序能通过调用android自带的照相机,返回图片到imageview上,并能读取内存卡保存到内存卡上,还能把该图片转换成字符串,以便能上传到服务器。
需要用到的架包是commons-codec-1.5.jar。
<--layout布局-->
<?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:background="#FFD3D7DF" >

    <LinearLayout
        android:id="@+id/takePicturePhone"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="10dip"
        android:background="@drawable/bg_frame"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:paddingBottom="2dip"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:paddingTop="10dip" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <ImageButton
                android:id="@+id/takePhone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/takepicture" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="154dp" >

            <ImageView
                android:id="@+id/preview"
                android:layout_width="wrap_content"
                android:layout_height="92dp" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>



<--activity-->
package zhang.xue.yi;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.codec.binary.Base64;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

/**
 * 拍照
 * 
 * @author Mr.Z
 * @time 2012-5-16
 * 
 */
public class TakePhotoActivity extends Activity {
	private Context context = TakePhotoActivity.this;

	private ImageButton btnTakePhone;
	private String path;
	private ImageView imageView;
	private Bitmap[] bmps = new Bitmap[6];
	private Bundle bundle;

	private LinearLayout takePicturePhone = null;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.locationapp);

		takePicturePhone = (LinearLayout) findViewById(R.id.takePicturePhone);
		useTakePicture();

	}

	/**
	 * 照相信息采集
	 */
	private void useTakePicture() {
		imageView = (ImageView) this.findViewById(R.id.preview);
		btnTakePhone = (ImageButton) findViewById(R.id.takePhone);
		btnTakePhone.setOnTouchListener(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				if (event.getAction() == MotionEvent.ACTION_DOWN) {
					// 更改为按下时的背景图片
					bmps[0] = BitmapFactory.decodeResource(getResources(), R.drawable.takepicture2);
					btnTakePhone.setImageBitmap(bmps[0]);
				} else if (event.getAction() == MotionEvent.ACTION_UP) {
					// 改为抬起时的图片
					bmps[1] = BitmapFactory.decodeResource(getResources(), R.drawable.takepicture);
					btnTakePhone.setImageBitmap(bmps[1]);
				}
				return false;
			}
		});
		btnTakePhone.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View arg0) {
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				startActivityForResult(intent, 1);
			}
		});
	}

	/**
	 *回显系统照片
	 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode == Activity.RESULT_OK) {
			String sdStatus = Environment.getExternalStorageState();
			if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
				Toast.makeText(context, "SD卡不存在!", 1000);
				return;
			}
			bundle = data.getExtras();
			Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
			FileOutputStream b = null;
			File file = new File("/sdcard/channel/");
			file.mkdirs();// 创建文件夹
			path = "/sdcard/channel/" + formatDatetime(new Date(), "yyyyMMddHHmmss") + ".jpg";
			try {
				System.out.println("path:" + path);
				b = new FileOutputStream(path);
				bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
				getImageBinary();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} finally {
				try {
					b.flush();
					b.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			this.imageView.setImageBitmap(bitmap);// 将图片显示在ImageView里
		}
	}

	/**
	 * 图片转换成字符串[BASE64]
	 * 
	 * @return
	 */
	public String getImageBinary() {
		System.out.println("path--->" + path);
		try {
			FileInputStream fis = new FileInputStream(path);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			byte[] buffer = new byte[8192];
			int count = 0;
			while ((count = fis.read(buffer)) >= 0) {
				baos.write(buffer, 0, count);

			}
			String uploadBuffer = new String(Base64.encodeBase64(baos.toByteArray()));
			fis.close();
			System.out.println("图片信息转换成字符串为:---->" + uploadBuffer);
			return uploadBuffer;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}

	/**
	 * 根据指定的日期格式生成日期时间串
	 * 
	 * @param format 日期格式,如yyyyMMdd
	 * @return dateTimeString
	 */
	public static String formatDatetime(Date date, String format) {
		DateFormat df = new SimpleDateFormat(format);
		return df.format(date);
	}
}


<--权限-->

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
分享到:
评论

相关推荐

    android 调用系统自带录音机

    总的来说,调用Android系统自带录音机是一项基础且实用的功能,通过Intent和MediaRecorder类的结合使用,我们可以轻松实现这一功能。然而,根据实际需求,有时可能需要自定义录音逻辑,以提供更加定制化的用户体验。...

    TIA博途中字符串转换相关指令的使用方法(一).docx

    TIA 博途中字符串转换相关指令的使用方法是指在 Siemens SIMATIC TIA Portal 中使用的字符串转换相关指令,包括移动和转换字符串指令、字符串和数值相互进行转换指令等。 1. 移动和转换字符串指令 移动和转换字符...

    Android 调用系统照相机,相册,上传图片

    在Android开发中,调用系统照相机、相册以及上传图片是常见的功能需求,尤其在社交应用、生活服务类应用中十分常见。本教程将详细讲解如何实现这些功能。 一、调用系统照相机 1. 添加权限:首先在AndroidManifest....

    delphi xe6 android 调用照相机摄像头拍照片

    你可以根据需要进一步处理这个图片,比如将其显示在应用的ImageView控件中,或者保存到本地文件系统。 值得注意的是,由于Android系统的权限管理,你需要在`AndroidManifest.xml`文件中添加使用相机的权限: ```...

    c#调用C++编写的dll,返回字符串

    网上很多资料描述如何C++编写dll给C#调用,大多都是COPY来的,需要返回字符串的函数,却一个也没有,给初学者带来很大困惑,海量的查资料依然没有收获,终于尝试着自己写,搞成功了!VS2010环境 64位的操作系统测试...

    android 视频录制 并保存到本地

    在Android平台上,视频录制并保存到本地是一项常见的功能,尤其对于开发移动应用的开发者来说,了解这个过程至关重要。本文将详细讲解如何实现Android视频录制,并将录制的视频保存到设备的本地存储,尤其是SD卡上。...

    Android 实现调用系统照相机拍照和录像的功能

    在Android平台上实现调用系统照相机拍照和录像功能是移动开发中常见的需求,以下内容将详细介绍实现该功能的步骤、方法以及涉及到的相关知识点。 一、基本概念 1. Intent:在Android中,Intent被用来激活不同的...

    delphi xe5 android 调用照相机摄像头拍照片camera

    至此,一个简单的使用Delphi XE5调用Android照相机功能的应用程序已经完成。当你运行此程序并点击"拍照"按钮,设备的相机应用会被启动,拍摄的照片会自动保存到外部存储,并显示在界面上。 需要注意的是,Android...

    android 调用照相机拍照

    在Android平台上,调用照相机拍照是常见的功能之一,它涉及到多媒体处理、用户交互以及硬件接口的使用。本文将深入探讨如何在Android应用中实现这一功能,并特别关注对焦优化。 首先,调用照相机拍照的基本流程是...

    Android客户端调用webService上传图片到服务器

    客户端调用Web Service接口请求图片,服务器端将图片以Base64编码的字符串形式返回,客户端接收到后解码并保存到本地。 7. **错误处理**:在整个过程中,客户端需要捕获可能抛出的异常,如`FileNotFoundException`,...

    c#调用VC编写的DLL 涉及到字符串 字符串数组用法

    - C++DLL可能会返回一个字符串数组,这时我们需要创建一个`IntPtr`数组来接收指针,然后逐个转换为C#的字符串。同样,别忘了释放内存。 - 示例: ```cpp extern "C" __declspec(dllexport) char** GetStrings...

    Android Studio 自定义相机+拍照保存到本地.zip

    Android Studio自定义相机,拍照保存到本地。Android版本:3.5 。主页面中有两个按钮:拍照和图片编辑,只对拍照添加了监听事件。拍照页面也有两个按钮:常规模式和笑脸模式,也只对常规模式添加了监听事件,调用的...

    拍照、获取图片、转成字符串

    总结来说,Android客户端中实现拍照、获取图片并转换成字符串的关键步骤包括启动相机应用、处理返回结果、调整图片尺寸以及进行Base64编码。这些操作涉及到系统服务的交互、文件操作、图像处理以及数据编码等多个...

    Retrofit2.0 处理返回的加密String字符串 Demo

    在这个Demo中,Presenter可以调用Retrofit的服务接口,处理加密字符串的请求和响应,而View(通常是Activity或Fragment)则展示解密后的数据。 为了实现MVP,你需要创建一个接口定义 Presenter 和 View 之间的交互...

    Android 调用系统相机拍照、以及相册

    在Android应用开发中,调用系统相机拍照和访问相册是常见的功能,用户可以通过这些功能获取并处理图像。本文将详细讲解如何实现这两个功能,并提供一个名为`TakePhotoDemo`的示例项目作为参考。 首先,调用系统相机...

    16进制字符串转换DWORDToHexString

    想“把数值转换成16进制字符串”,比如0x00000123转换成字符串"00000123",虽然有函数_itoa可以调用,但是返回结果是"123",用sprintf又不甘心,就自己动手写一个函数DWORDToHexString,附带的HexStringToValue有误...

    C语言实现字符串截取

    该函数返回一个新的字符串,该字符串包含了原字符串中从 `begin` 到 `end`(包括 `end`)的所有字符。 #### 参数说明 - **Input**: - `string`:原始字符串。 - `begin`:截取的起始索引(包含)。 - `end`:...

    Android调用相机拍照保存照片.rar

    Android 安卓调用系统相机拍摄照片一例,在打开相机后自动检测sd是否可用,获取相机返回的数据,并转换为Bitmap图片格式,创建文件夹,把数据写入文件,将图片显示在ImageView里。其实是向android新手演示了整个大致...

    android 调用自带录像功能 保存自定义路径

    在Android平台上,调用系统自带的录像功能并指定保存路径是一项常见的需求,这涉及到多媒体处理、Intent使用以及文件系统的操作。下面将详细讲解如何实现这一功能。 首先,我们需要理解Android的Intent机制。Intent...

    将list数据通过LitePal保存到本地

    标题中的“将list数据通过LitePal保存到本地”是指在Android开发中,使用LitePal库将从服务器获取的list类型的数据存储到本地SQLite数据库中。LitePal是一个轻量级的ORM(Object-Relational Mapping)框架,它使得...

Global site tag (gtag.js) - Google Analytics