`

相机的简单调用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例程代码

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

    海康相机Demo.zip

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

    海康威视网络摄像头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-C++.rar

    开发者需要理解如何调用这些函数,并处理返回的相机设备信息。 2. **连接相机**: 一旦找到相机,就需要建立连接。这通常包括配置通信参数(如IP地址、端口等),然后通过SDK进行连接。连接成功后,开发者可以对...

    iphone照相机简单demo

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

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

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

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

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

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

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics