android调用系统相机返回到页面,保存到本地和把图片转换成字符串
android调用系统照相机返回到页面,保存到本地和把图片转换成字符串
本程序能通过调用android自带的照相机,返回图片到imageview上,并能读取内存卡保存到内存卡上,还能把该图片转换成字符串,以便能上传到服务器。
需要用到的架包是commons-codec-1.5.jar。
<--layout布局-->
<--activity-->
<--权限-->
本程序能通过调用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" />