`

相机的简单调用Demo

阅读更多
主类:
package com.mzh.www;

import java.io.ByteArrayOutputStream;
import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
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.Toast;

/**  
* @Title: CameraTestActivity.java
* @Package com.lvguo.www
* @Description: 相机测试
* @author MZH
* @version V2.2   老样子,写个自己喜欢的版本号,方便日后维护
*/
public class CameraTestActivity extends Activity {
	
	private Button btn ;
	private static final String IMAGE_UNSPECIFIED = "image/*";
	String kkk = null;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//第一次看见这个类,不认识,直接Android Developer里面Search   
				//小x英文不是很好,时刻在电脑上挂着词典,也希望朋友们能准备一款自己喜爱的词典
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				//参数可直接在官方文档里面查到,所以朋友们练下手吧,自己查下EXTRA_OUTPUT
				intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
						.fromFile(new File(Environment
								.getExternalStorageDirectory(),
								"mzh.jpg")));//temp为保存照片的文件名
				
				//此处讲几句,类似这些方法,小x建议直接在浏览器下查,因为文档查不到就说没查到,
				//有网情况下,会自动定位到Activity | Android Developers直接点就OK了
				
				startActivityForResult(intent, 1); //这是个好东西哦
				Toast.makeText(getApplicationContext(), "点击拍照", Toast.LENGTH_LONG).show();
			}
		});
    }
    
    
    /**
     * 用来处理startActivityForResult返回的数据,查此方法用老办法 :直接在浏览器下查
     */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == 9) {  //此处的数字自己定,可随便  
			Bundle extras = data.getExtras();
			if (extras != null) {
				Bitmap photo = extras.getParcelable("data");
				ByteArrayOutputStream stream = new ByteArrayOutputStream();
				//英语不好的朋友,拿工具查compress是什么意思就明白了,小x英语一般,所以此处多说一句,工具
				photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);
				byte[] b = stream.toByteArray();
				
				
				//Base64Coder是一个剪切压缩辅助类,里面的东西我也看不懂,不过没事,直接用,因为要用的方法不多,情况具体定
				kkk = new String(Base64Coder.encodeLines(b));
			}

		}
		if(requestCode == 1){
			File picture = new File(Environment.getExternalStorageDirectory()
					+ "/mzh.jpg");
			cutPic(Uri.fromFile(picture));
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
	
	public void cutPic(Uri uri) {
		//下面这一句第一眼看到我不懂,没事,直接Android Developer里面Search  Intent 
		
		//熟悉下面Summary吗?用工具查什么意思,再找下它是什么地方的,是官方文档最右侧顶端 的东西,里面有个Ctros,点进去
		//Summary: Nested Classes | Constants | Inherited Constants | Fields 
		//| Ctors | Methods | Inherited Methods | [Expand All]
		//会发现有个构造方法:Intent(String action)。。。。再点进去,贴官方代码:
		/**
		 * public Intent (String action)

		Since: API Level 1
			Create an intent with a given action. All other fields (data, type, class) are null. 
			Note that the action must be in a namespace because Intents are used globally in 
			the system -- for example the system VIEW action is android.intent.action.VIEW; 
			an application's custom action would be something like com.google.app.myapp.CUSTOM_ACTION.
		Parameters

 			<看到这句了吧?ACTION_VIEW,不知道的可以再Search>
			action	The Intent action, such as ACTION_VIEW.
			
			 要再不明白的朋友可以直接在有网情况下直接把com.android.camera.action.CROP Search一下就OK了,
			 小x查询文档的能力不强,所以在查询这块多说几句

		 */
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
		intent.putExtra("crop", "true");
		// aspectX aspectY 是宽高的比例
		intent.putExtra("aspectX", 1);
		intent.putExtra("aspectY", 1);
		// outputX outputY 是裁剪图片宽高
		intent.putExtra("outputX", 150);
		intent.putExtra("outputY", 150);
		intent.putExtra("return-data", true);
		startActivityForResult(intent, 9);
	}
    
    
    
    
}


Base64Coder.java
package com.mzh.www;

//Copyright 2003-2010 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
//www.source-code.biz, www.inventec.ch/chdh
//
//This module is multi-licensed and may be used under the terms
//of any of the following licenses:
//
//EPL, Eclipse Public License, V1.0 or later, http://www.eclipse.org/legal
//LGPL, GNU Lesser General Public License, V2.1 or later, http://www.gnu.org/licenses/lgpl.html
//GPL, GNU General Public License, V2 or later, http://www.gnu.org/licenses/gpl.html
//AL, Apache License, V2.0 or later, http://www.apache.org/licenses
//BSD, BSD License, http://www.opensource.org/licenses/bsd-license.php
//
//Please contact the author if you need another license.
//This module is provided "as is", without warranties of any kind.


/**
* A Base64 encoder/decoder.
*
* <p>
* This class is used to encode and decode data in Base64 format as described in RFC 1521.
*
* <p>
* Project home page: <a href="http://www.source-code.biz/base64coder/java/">www.source-code.biz/base64coder/java</a><br>
* Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland<br>
* Multi-licensed: EPL / LGPL / GPL / AL / BSD.
*/
public class Base64Coder {

//The line separator string of the operating system.
private static final String systemLineSeparator = System.getProperty("line.separator");

//Mapping table from 6-bit nibbles to Base64 characters.
private static char[]    map1 = new char[64];
static {
   int i=0;
   for (char c='A'; c<='Z'; c++) map1[i++] = c;
   for (char c='a'; c<='z'; c++) map1[i++] = c;
   for (char c='0'; c<='9'; c++) map1[i++] = c;
   map1[i++] = '+'; map1[i++] = '/'; }

//Mapping table from Base64 characters to 6-bit nibbles.
private static byte[]    map2 = new byte[128];
static {
   for (int i=0; i<map2.length; i++) map2[i] = -1;
   for (int i=0; i<64; i++) map2[map1[i]] = (byte)i; }

/**
* Encodes a string into Base64 format.
* No blanks or line breaks are inserted.
* @param s  A String to be encoded.
* @return   A String containing the Base64 encoded data.
*/
public static String encodeString (String s) {
return new String(encode(s.getBytes())); }

/**
* Encodes a byte array into Base 64 format and breaks the output into lines of 76 characters.
* This method is compatible with <code>sun.misc.BASE64Encoder.encodeBuffer(byte[])</code>.
* @param in  An array containing the data bytes to be encoded.
* @return    A String containing the Base64 encoded data, broken into lines.
*/
public static String encodeLines (byte[] in) {
return encodeLines(in, 0, in.length, 76, systemLineSeparator); }

/**
* Encodes a byte array into Base 64 format and breaks the output into lines.
* @param in            An array containing the data bytes to be encoded.
* @param iOff          Offset of the first byte in <code>in</code> to be processed.
* @param iLen          Number of bytes to be processed in <code>in</code>, starting at <code>iOff</code>.
* @param lineLen       Line length for the output data. Should be a multiple of 4.
* @param lineSeparator The line separator to be used to separate the output lines.
* @return              A String containing the Base64 encoded data, broken into lines.
*/
public static String encodeLines (byte[] in, int iOff, int iLen, int lineLen, String lineSeparator) {
int blockLen = (lineLen*3) / 4;
if (blockLen <= 0) throw new IllegalArgumentException();
int lines = (iLen+blockLen-1) / blockLen;
int bufLen = ((iLen+2)/3)*4 + lines*lineSeparator.length();
StringBuilder buf = new StringBuilder(bufLen);
int ip = 0;
while (ip < iLen) {
   int l = Math.min(iLen-ip, blockLen);
   buf.append (encode(in, iOff+ip, l));
   buf.append (lineSeparator);
   ip += l; }
return buf.toString(); }

/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted in the output.
* @param in  An array containing the data bytes to be encoded.
* @return    A character array containing the Base64 encoded data.
*/
public static char[] encode (byte[] in) {
return encode(in, 0, in.length); }

/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted in the output.
* @param in    An array containing the data bytes to be encoded.
* @param iLen  Number of bytes to process in <code>in</code>.
* @return      A character array containing the Base64 encoded data.
*/
public static char[] encode (byte[] in, int iLen) {
return encode(in, 0, iLen); }

/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted in the output.
* @param in    An array containing the data bytes to be encoded.
* @param iOff  Offset of the first byte in <code>in</code> to be processed.
* @param iLen  Number of bytes to process in <code>in</code>, starting at <code>iOff</code>.
* @return      A character array containing the Base64 encoded data.
*/
public static char[] encode (byte[] in, int iOff, int iLen) {
int oDataLen = (iLen*4+2)/3;       // output length without padding
int oLen = ((iLen+2)/3)*4;         // output length including padding
char[] out = new char[oLen];
int ip = iOff;
int iEnd = iOff + iLen;
int op = 0;
while (ip < iEnd) {
   int i0 = in[ip++] & 0xff;
   int i1 = ip < iEnd ? in[ip++] & 0xff : 0;
   int i2 = ip < iEnd ? in[ip++] & 0xff : 0;
   int o0 = i0 >>> 2;
   int o1 = ((i0 &   3) << 4) | (i1 >>> 4);
   int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6);
   int o3 = i2 & 0x3F;
   out[op++] = map1[o0];
   out[op++] = map1[o1];
   out[op] = op < oDataLen ? map1[o2] : '='; op++;
   out[op] = op < oDataLen ? map1[o3] : '='; op++; }
return out; }

/**
* Decodes a string from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param s  A Base64 String to be decoded.
* @return   A String containing the decoded data.
* @throws   IllegalArgumentException If the input is not valid Base64 encoded data.
*/
public static String decodeString (String s) {
return new String(decode(s)); }

/**
* Decodes a byte array from Base64 format and ignores line separators, tabs and blanks.
* CR, LF, Tab and Space characters are ignored in the input data.
* This method is compatible with <code>sun.misc.BASE64Decoder.decodeBuffer(String)</code>.
* @param s  A Base64 String to be decoded.
* @return   An array containing the decoded data bytes.
* @throws   IllegalArgumentException If the input is not valid Base64 encoded data.
*/
public static byte[] decodeLines (String s) {
char[] buf = new char[s.length()+3];
int p = 0;
for (int ip = 0; ip < s.length(); ip++) {
   char c = s.charAt(ip);
   if (c != ' ' && c != '\r' && c != '\n' && c != '\t')
      buf[p++] = c; }
   while ((p % 4) != 0)
	   buf[p++] = '0';
	
return decode(buf, 0, p); }

/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param s  A Base64 String to be decoded.
* @return   An array containing the decoded data bytes.
* @throws   IllegalArgumentException If the input is not valid Base64 encoded data.
*/
public static byte[] decode (String s) {
return decode(s.toCharArray()); }

/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param in  A character array containing the Base64 encoded data.
* @return    An array containing the decoded data bytes.
* @throws    IllegalArgumentException If the input is not valid Base64 encoded data.
*/
public static byte[] decode (char[] in) {
return decode(in, 0, in.length); }

/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param in    A character array containing the Base64 encoded data.
* @param iOff  Offset of the first character in <code>in</code> to be processed.
* @param iLen  Number of characters to process in <code>in</code>, starting at <code>iOff</code>.
* @return      An array containing the decoded data bytes.
* @throws      IllegalArgumentException If the input is not valid Base64 encoded data.
*/
public static byte[] decode (char[] in, int iOff, int iLen) {
if (iLen%4 != 0) throw new IllegalArgumentException ("Length of Base64 encoded input string is not a multiple of 4.");
while (iLen > 0 && in[iOff+iLen-1] == '=') iLen--;
int oLen = (iLen*3) / 4;
byte[] out = new byte[oLen];
int ip = iOff;
int iEnd = iOff + iLen;
int op = 0;
while (ip < iEnd) {
   int i0 = in[ip++];
   int i1 = in[ip++];
   int i2 = ip < iEnd ? in[ip++] : 'A';
   int i3 = ip < iEnd ? in[ip++] : 'A';
   if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127)
      throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
   int b0 = map2[i0];
   int b1 = map2[i1];
   int b2 = map2[i2];
   int b3 = map2[i3];
   if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0)
      throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
   int o0 = ( b0       <<2) | (b1>>>4);
   int o1 = ((b1 & 0xf)<<4) | (b2>>>2);
   int o2 = ((b2 &   3)<<6) |  b3;
   out[op++] = (byte)o0;
   if (op<oLen) out[op++] = (byte)o1;
   if (op<oLen) out[op++] = (byte)o2; }
return out; }

//Dummy constructor.
private Base64Coder() {}

} // end class Base64Coder


配置文件:
  <?xml version="1.0" encoding="utf-8" ?> 
- <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mzh.www" android:versionCode="1" android:versionName="1.0">
  <uses-sdk android:minSdkVersion="8" /> 
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".CameraTestActivity" android:label="@string/app_name">
- <intent-filter>
  <action android:name="android.intent.action.MAIN" /> 
  <category android:name="android.intent.category.LAUNCHER" /> 
  </intent-filter>
  </activity>
  </application>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
- <!--  相机使用权限 
  --> 
  <uses-permission android:name="android.permission.CAMERA" /> 
  <uses-feature android:name="android.hardware.camera" /> 
  <uses-feature android:name="android.hardware.camera.autofocus" /> 
  </manifest>
分享到:
评论

相关推荐

    海康相机c++调用demo.rar

    海康相机C++调用Demo是一个关于如何使用C++编程语言与海康威视的IPCamera进行交互,并将捕获的图像转换为OpenCV库可处理格式的实践项目。这个项目涉及到了几个关键的技术点,包括海康相机的SDK调用、多线程编程以及...

    Android相机调用和自定义相机Demo源码

    以上就是关于Android相机调用和自定义相机的基本介绍。实际开发中,还需要考虑相机权限、横竖屏切换、图片旋转等问题。同时,博客中提到的图片加载也是重要的一环,可以使用像Glide、Picasso这样的库来优化图片显示...

    webview 调用手机相机和图库demo(亲测好用)

    webview 调用手机相机和图库demo(亲测好用) webview.setWebChromeClient(new WebChromeClient() public boolean onShowFileChooser (WebView webView, ValueCallback[]&gt; uploadMsg, FileChooserParams ...

    webview 调用手机相机和图库demo

    这个资源是从网上下载来的,不过经过本人改造,目前适合高版本android使用,经测试完全没有,可以直接在android studio 3.0上运行。 这个是一个非常简易的webview调用相机拍照和预览的demo,希望能帮助到需要的人。

    Android 海康摄像头调用demo

    【Android 海康摄像头调用demo】是一个专为Android平台设计的应用示例,它展示了如何通过SDK与海康威视的摄像头设备进行交互。在早期的版本中,开发者可能会遇到JNI(Java Native Interface)错误,这通常是由于Java...

    go语言开发宇视相机LAPI调用demo

    go语言开发宇视相机LAPI调用demo 对相机的温度,火点检测进行参数设置和获取,分析告警图片

    海康相机Demo.zip

    海康相机Demo.zip是一个包含海康威视工业相机SDK演示程序的压缩文件,适用于进行机器视觉和工业检测应用。这个SDK(Software Development Kit)是海康威视为开发者提供的工具集,帮助用户能够有效地控制和利用...

    大华工业相机demo例程代码

    使用大华工业相机,官方提供的demo实现的功能非常少。这个demo是实际工程的初稿,用到多线程4个相机同时运行,可以在用户界面上同时运行4个相机。实现的功能包括搜索设备、打开\关闭、软触发、内部连续触发、设置...

    海康威视网络摄像头Delphi调用Demo

    在这个"海康威视网络摄像头Delphi调用Demo"中,我们将深入探讨如何利用Delphi这一强大的RAD(快速应用开发)工具与海康威视的网络摄像头进行交互。 首先,Delphi是一种基于Object Pascal的集成开发环境,以其高效的...

    android 7.0调用系统相机demo

    在Android开发中,调用系统相机是一项常见的功能,特别是在创建应用程序需要用户拍摄照片或选择已有图片时。在Android 7.0(API级别24)中,这一过程相对较为直观,但仍然需要遵循一些关键步骤来确保正确实现。本篇...

    大华相机的Demo-QT

    开发者需要将这些资源导入到QT项目中,以便调用相机的相关功能。 3. **相机搜索**:通过SDK提供的接口,开发者可以编写代码来搜索本地网络中的大华相机设备。这通常涉及到网络发现协议如UPnP或自定义协议。 4. **...

    海康工业相机二次开发demo

    在本“海康工业相机二次开发demo”中,包含了三种主流编程语言——MFC(Microsoft Foundation Classes)、C#以及Java的开发实例,旨在帮助开发者快速理解和实现在各自开发环境中与海康工业相机的接口交互。...

    iphone照相机简单demo

    本教程将聚焦于“iPhone照相机简单demo”,探讨如何利用系统接口调用iPhone的照相机,实现拍照并查看照片的功能。 首先,我们需要了解的是苹果的Media Capture框架,特别是AVFoundation框架,它是iOS平台上处理音频...

    dalsa相机sdk说明书帮助文档、demo

    本文将深入解析Dalsa相机SDK,结合官方的帮助文档和示例程序(Demo),探讨如何高效地利用C++和C#语言进行相机控制与图像处理。 一、SDK概述 Dalsa相机SDK是一个包含库文件、头文件、示例代码和详细文档的集合,...

    SDK 迈德威视相机--双相机采集Demo

    在本例中,“SDK 迈德威视相机--双相机采集Demo”是一个针对迈德威视(MindVision)相机的开发套件,特别设计用于实现双相机的数据采集和显示功能。迈德威视是一家知名的工业相机制造商,其产品广泛应用于机器视觉、...

    C# winform调用本机摄像头demo 附源码

    C# winform调用本机摄像头demo 附源码 c#调用本机摄像头,支持多摄像头切换,支持多分辨率切换,支持拍照,这是个demo程序,源码清晰简单。一共几十行代码。采用vs2012开发,winform程序

    相机SDK-JAVA.zip_DEMO_hardware_java相机开发_java调用相机sdk_监控相机SDK

    描述中提到的“监控相机SDK调用DEMO,使用JAVA开发,相机打开与控制开闸”进一步细化了SDK的主要功能。这里提到了两个关键点:一是“相机打开”,意味着SDK提供了启动和初始化相机设备的功能;二是“控制开闸”,这...

    海康工业相机SDK的Demo源代码C++版本

    海康工业相机SDK的Demo源代码C++版本是专为机器视觉工程师设计的一款实用工具,它基于著名的图形用户界面库Qt进行开发,旨在帮助开发者更好地理解和应用海康工业相机的API功能,实现图像采集和设备控制。这个SDK库...

Global site tag (gtag.js) - Google Analytics