`

android canmera相机

阅读更多
MainActivity.java:
package com.canmera.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.app.Activity;
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.Menu;
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 Button button_openCanmera, button_openAlbum, button_gaoQing;
 private ImageView imageView;
 private String imageUrl = "";// 要打开的图片的路径

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  findViews();
  setListeners();
 }

 private void findViews() {
  // TODO Auto-generated method stub
  button_openCanmera = (Button) findViewById(R.id.button1);
  button_openAlbum = (Button) findViewById(R.id.button2);
  button_gaoQing = (Button) findViewById(R.id.button3);
  imageView = (ImageView) findViewById(R.id.imageView1);
 }

 private void setListeners() {
  // TODO Auto-generated method stub
  button_openCanmera.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    // 调用相机
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    startActivityForResult(intent, 2);
   }
  });
  // 这种方法保存的图片质量好点
  button_gaoQing.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    // 调用相机
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    // 拍完照片之后保存的路径(文件名)
    String path = "/sdcard/myImage/gaoQing.png";

    // 加上这个后,图片就不会被压缩变小了
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
      Uri.fromFile(new File(path)));

    startActivityForResult(intent, 1);
   }
  });
  
  //打开相册
  button_openAlbum.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    // Intent intent = new
    // Intent(MainActivity.this,SDCARD123Activity.class);
    // startActivity(intent);

    Intent intent = new Intent(
      Intent.ACTION_PICK,
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(intent, 1);
    // startActivityForResult(Intent.createChooser(intent,
    // "Pick any photo"), 1);

   }
  });

  imageView.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    if("".equals(imageUrl)){
     Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
     intent.setType("image/*");
     startActivityForResult(intent, 1);
    }else{
     Intent intent = new Intent(Intent.ACTION_VIEW);
     intent.setDataAndType(Uri.fromFile(new File(imageUrl)),"image/*");
     startActivity(intent);
    }
   }
  });
 }

 // 相机的回调函数
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
  if (data != null && data.getExtras() != null) {// 普通的拍照
   saveImage(requestCode, resultCode, data);
   Bitmap bitmap = (Bitmap) data.getExtras().get("data");
   imageView.setImageBitmap(bitmap);
  } else if (data != null && data.getData() != null) {// 打开相册回调函数
   String imagePath = getImagePath(data);
   imageUrl = imagePath;
   imageView.setImageBitmap(BitmapFactory.decodeFile(imagePath, null));
  } else {// 获取高清图片的方法
   imageUrl = "/sdcard/myImage/gaoQing.png";
   imageView.setImageBitmap(BitmapFactory.decodeFile(imageUrl, null));
  }

 }

 // 保存图片到sd卡(保存的图片不清晰)
 private void saveImage(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  Bitmap bitmap = (Bitmap) data.getExtras().get("data");

  String sdStatus = Environment.getExternalStorageState();
  if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {// 检查sd卡是否可用
   Toast.makeText(this, "SD卡不可用", Toast.LENGTH_LONG).show();
   return;
  }
  new File("/sdcard/myImage/").mkdirs();// 创建文件夹
  OutputStream outputStream = null;
  try {
   String imagePath = "/sdcard/myImage/11.png";
   outputStream = new FileOutputStream(imagePath);
   bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);// 把数据写入文件quality的值0...100

  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   try {
    if (outputStream != null) {
     outputStream.flush();
     outputStream.close();
    }
    if (bitmap != null) {
     bitmap.recycle();//清理图片内存
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

 }

 // 返回图片的绝对路径
 private String getImagePath(Intent data) {
  // TODO Auto-generated method stub
  Uri uri = data.getData();// 可以得到图片在Content://。。。中的地址,把它转化成绝对地址如下
  String[] proj = { MediaStore.Images.Media.DATA };
  String imagePath = "";
  Cursor cursor = managedQuery(uri, proj,null, null, null);// 查哪一列
  if (cursor != null) {
   int column_index = cursor
     .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
   if (cursor.getCount() > 0 && cursor.moveToFirst()) {
    imagePath = cursor.getString(column_index);
   }
  }
  return imagePath;
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }
}



manifest.xml:
   
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

 

分享到:
评论

相关推荐

    android camera 相机程序

    ### Android Camera相机程序知识点 #### 一、Camera启动与初始化 **1. Activity启动流程** 在Android Camera程序中,活动(Activity)的启动流程遵循标准的生命周期管理方式:`onCreate()`→`onStart()`→`onResume...

    AndroidCamera相机介绍.ppt

    Android camera整体框架介绍

    Android Camera相机类

    在Android平台上,Camera类是开发者用来访问和控制设备相机功能的核心接口。这个API允许我们启动相机,捕获静态图片,录制视频,以及调整各种拍摄参数。Android Camera API分为两个主要版本:Camera1(旧版)和...

    android Camera 相机

    Android提供了两种主要的方式来实现相机功能:调用系统相机(Intent)和自定义相机(Camera API)。这两种方法各有优缺点,适用于不同的场景。 ### 一、调用系统相机(Intent) 通过Intent调用系统相机是最简单的...

    androidcamera相机

    Android Camera API提供了丰富的接口和工具,使得开发者可以构建自己的相机应用,实现拍照、录像以及自定义对焦等功能。本文将深入探讨Android相机源码中的关键知识点。 首先,我们需要了解Android Camera API的...

    Android Camera问题资料

    这两个MHT文件可能包含了对Android开源项目中Camera组件的源码分析,可能涉及了相机服务的实现、框架层与硬件抽象层的交互,以及如何在不同设备上适配相机功能。 4. **Android的IPC机制Binder的各个部分**: 这两...

    Android Camera2 Demo - 实现相机预览、拍照、录制视频功能

    因为工作中要使用 Android Camera2 API 来实现相机功能,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,这个项目就是我研究的成果。 其中包括一个自己写的Camera2的Demo...

    android 简易camera照相机

    这个“简易camera相机”很可能基于Camera API1,因为它是更简单的选择,适合初学者学习。 1. **初始化Camera**:在Android中,要使用Camera,首先要通过`Camera.open(int cameraId)`方法打开特定的摄像头。cameraId...

    Android Camera开发与设置偏好值

    在提供的压缩包文件AndroidCamera-EnableSettings-master中,可能包含了实现以上步骤的示例代码,通过学习和分析这些代码,你可以更好地理解和实践Android相机开发。 总的来说,Android相机开发涉及多方面知识,...

    android 自定义相机,Camera和camera2.TextureView,相机遮罩层demo

    Camera API是Android早期提供的相机接口,虽然现在已经被推荐使用Camera2 API,但在某些低版本系统中仍然适用。Camera API主要通过`Camera`类来控制摄像头,提供了拍照、预览和录像等功能。而Camera2 API则是Android...

    android Camera 系统,自定义相机

    在Android平台上,自定义相机(Custom Camera)是一个常见的需求,涉及到对系统相机API的深入理解和应用。本主题将详述如何在Android中构建一个自定义的相机应用,涵盖关键概念、步骤以及可能遇到的问题。 一、...

    Android 自定义相机Camera2源码下载

    在Android平台上,自定义相机开发是一项常见的任务,Camera2 API是Google为了提供更高级、更灵活的相机控制而引入的接口。本教程将深入探讨如何使用Camera2 API创建一个自定义相机应用,通过分析提供的OneSelfCamera...

    android-Camera-Code.zip_android 相机_android 相机_camera_camera and

    本文将深入探讨`android-Camera-Code.zip`中的相机应用示例,以及如何在Eclipse环境中进行导入和编译。这个压缩包包含了一个完整的Android相机工程,提供了对Android相机API的直观理解和实际操作。 ### 相机API简介...

    android4.0 Camera照相机 源代码

    这个压缩包文件包含了Android 4.0 Camera应用层的源代码,对于想要深入理解Android Camera工作原理和开发自定义相机应用的开发者来说,是一个宝贵的学习资源。 首先,我们来了解一下Android Camera的基本结构。在...

    Android中的Camera相机开发设计示例演示

    这个库包括`androidx.camera.core`、`androidx.camera.lifecycle`和`androidx.camera.view`等模块,分别处理相机核心功能、生命周期管理和用户界面组件。 1. **初始化与配置** AndroidX Camera库的初始化通常在...

    Android 自定义相机Camera类

    本文将深入探讨如何利用`android.hardware.camera` API来构建一个自定义相机应用,并结合SurfaceView进行预览显示。 首先,我们需要了解`Camera`类是Android系统提供的核心组件,用于与设备的物理相机硬件进行交互...

    Android Camera添加水印(编码)

    在Android API 14及以上版本,系统提供了Camera2 API,这是一个更强大且灵活的接口,用于控制相机硬件。对于较旧的设备,可以使用Camera API。无论选择哪个API,我们都需要处理捕获的每一帧数据,并在此基础上添加...

    android camera 拍照流程图

    1. **Camera API**(旧版):这是早期Android系统中提供的相机接口,简单易用,但功能相对有限,不支持高级定制和硬件级别的控制。 2. **Camera2 API**:自Android 5.0(Lollipop)开始引入,提供了更全面的相机...

    Android自定义相机Camera

    在Android开发中,自定义相机(Camera)是一个常见的需求,特别是在开发涉及图像处理或拍照功能的应用时。Android原生提供了Camera API,但直接使用可能会遇到一些问题,如图像拉伸、拍照翻转等。本教程将详细介绍...

    android camera mirror 使用SurfaceView自定义相机视频实现预览时左右镜像,实现镜子效果

    android camera mirror 前置后置相机视频预览时左右镜像,实现镜子效果 基于以下网址实现的android studio项目源代码包,可以直接打开使用 https://blog.csdn.net/mbrose/article/details/80167781 代码做了一...

Global site tag (gtag.js) - Google Analytics