android两种使用照相功能获取图片的方法

Android拍照的方式:调用系统相机、自定义 Camera 相机、相册、拍照 阅读详情

两种方法,一种是直接调用系统的照相Intent,使用onActivityResult获取图片资源;一种是用SurfaceView自己控制界 面。两种各有优缺点,前一种直接使用系统照相程序,会自带了很多系统功能,比如焦距调节,闪光灯调节之类的。后一种可以自定义界面,添加些自己需要增加的 功能。但竖屏拍照的预览照片角度不对。

代码如下:

第一种:

package com.photo;

import java.io.File;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.util.Log;

public class PhotographActivity extends Activity {

/** Called when the activity is first created. */

private String logTag = “Exception”;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//        setContentView(R.layout.main);

try {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

File out = new File(Environment.getExternalStorageDirectory(), “camera.jpg”);

Uri uri = Uri.fromFile(out);

intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

startActivityForResult(intent, 0);

} catch (Exception e) {

e.printStackTrace();

}

}

protected void onActivityResult(int requestCode, int resultCode, Intent data)

{

try {

Log.v(“”, “requestCode = “+requestCode+” resultCode =  ”+resultCode);

if (requestCode != 0) {

return;

}

if (resultCode==0) {

finish();

return;

}

//     Bundle extras = data.getExtras();

//     Bitmap b = (Bitmap) extras.get(“data”);

Intent intent = new Intent();

intent.setClass(this, ShowImageActivity.class);

//     intent.putExtra(“image”,b);

this.startActivity(intent);

} catch (Exception e) {

// TODO: handle exception

Log.v(logTag, e.getMessage());

}

}

}

另一个activity:
package com.photo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
public class ShowImageActivity extends Activity {
private String logTag = “exception”;
private AlertDialog  alertDialog;
private ImageView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
try {
view = (ImageView) findViewById(R.id.view);
// Bundle bundle = this.getIntent().getExtras();
// Bitmap b = bundle.getParcelable(“image”);
String pathString = Environment.getExternalStorageDirectory().toString() + “/camera.jpg”;
Log.v(“”, “pathString = “+pathString);
Bitmap b = BitmapFactory.decodeFile(pathString);
view.setImageBitmap(b);
//setContentView(view);
alertDialog = new AlertDialog.Builder(ShowImageActivity.this)
.setMessage(“Feels Like IS感觉就像IS尽量晃动手机,体验IS的无限动感。”)
.setPositiveButton(“ok”, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked OK so do some stuff */
}
})
.setNegativeButton(“cancle”, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked Cancel so do some stuff */
}
})
.create();
alertDialog.show();
} catch (Exception e) {
Log.v(logTag, e.getMessage());
throw new RuntimeException(e);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
Log.v(“”, “event = “+event.getX());
return super.onTouchEvent(event);
}
}
 
第二种:
 
package com.zxhwolfe.feelslike;
import java.io.IOException;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class FeelsLike extends Activity implements Callback, OnClickListener {
/** Called when the activity is first created. */
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;
private ImageView mImageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
mSurfaceView = (SurfaceView) findViewById(R.id.camera);
mImageView = (ImageView) findViewById(R.id.image);
mImageView.setVisibility(View.GONE);
mSurfaceView.setOnClickListener(this);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if (mPreviewRunning) {
mCamera.stopPreview();
}
Parameters params = mCamera.getParameters();
params.setPictureFormat(PixelFormat.JPEG);// 设置图片格式
// params.setPreviewSize(width, height);
params.set(“rotation”,90);
mCamera.setParameters(params);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
private AutoFocusCallback mAutoFocusCallBack = new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
Log.v(“AutoFocusCallback”, “AutoFocusCallback”+success);
Camera.Parameters Parameters = mCamera.getParameters();
Parameters.setPictureFormat(PixelFormat.JPEG);// 设置图片格式
mCamera.setParameters(Parameters);
mCamera.takePicture(mShutterCallback, null, mPictureCallback);
}
};
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
mCamera = null;
}
/**
* 拍照的回调接口
*/
PictureCallback mPictureCallback = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.v(“PictureCallback”, “…onPictureTaken…”);
if (data != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
mImageView.setImageBitmap(bitmap);
mImageView.setVisibility(View.VISIBLE);
mSurfaceView.setVisibility(View.GONE);
if (mPreviewRunning) {
mCamera.stopPreview();
mPreviewRunning = false;
}
}
}
};
/**
* 在相机快门关闭时候的回调接口,通过这个接口来通知用户快门关闭的事件,
* 普通相机在快门关闭的时候都会发出响声,根据需要可以在该回调接口中定义各种动作, 例如:使设备震动
*/
ShutterCallback mShutterCallback = new ShutterCallback() {
public void onShutter() {
//just log ,do nothing
Log.v(“ShutterCallback”, “…onShutter…”);
}
};
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){
if(mCamera !=null){
// mCamera.takePicture(null, null,mPictureCallback);
mCamera.autoFocus(mAutoFocusCallBack);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.v(“onClick”, “…onClick…”);
mCamera.autoFocus(mAutoFocusCallBack);
}
}
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
>
<SurfaceView android:id=”@+id/camera”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”/>
<ImageView android:id=”@+id/image”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”/>
</LinearLayout>
安卓开发-自定义照相机界面 安卓开发-自定义照相机界面 此项目是总结了其他三位大佬的代码后写出来的,在此首先感谢三位大佬: 自定义照相机编写方法:https://blog.youkuaiyun.com/shan286/article/details/53189034 解决照相机拍的照片像素低的方法:https://blog.youkuaiyun.com/w6718189/article/details/104501618?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=10 阅读详情

相关推荐

android开发APP实现照相机功能

Android SDK 中提供的面向硬件的特性特性描述android.hardware.Camera相机交互的类,可以截取照片、获取预览屏幕的图像,修改照相机操作的参数。android.hardware.SensorManager允许访问 Android 平台传感器的类。并非所有配备 Android 的设备都支持 SensorManager 中的所有传感器。android.hardware.Sen...

sinat_38536045的博客 7135

android调用系统拍照、相册

android调用系统拍照、相册

chongchi_wxcc的博客 3186

Android基础进阶 - 调用拍照、获取图片

本篇给大家带来的是拍照回传的初级使用,用的同样是数据回传的方式,首先 startActivityForResult 确定 Action、requestCode,之后重写 onActivityResult 进行逻辑操作,拍照的照片回传,AndroidMainfest 添加权限。

Android、前端、小程序、后端 3884

Android——从相机/相册获取图片

【代码】Android——从相机/相册获取图片。

大风起兮云飞扬 1288

Android基础进阶 - 获取、调用相册内图片

本篇讲的是获取我们相册的照片,用于展示,包含获取对应的图片的存放地址。

Android、前端、小程序、后端 7305

Android 相册获取图片或者相机拍照获取图片

android studio 开发,使用FileProvider兼容4.4版本以上文件权限读取。适配常见手机文件系统路径。

第58章、拍照功能实现(从零开始学Android)

来自:http://blog.youkuaiyun.com/jianghuiquan/article/details/8569187 Android有两种拍照方法,一种是直接调用系统的照相Intent,使用 onActivityResult获取图片资源或者指定图片路径,拍照返回成功后去指定路径读取图片;一种是用SurfaceView自定义界面,添加业务个性化功能。 一、第一种方法 1

丿灬安之若死 379

Android获取本地相册图片和拍照获取图片的实现方法

需求:从本地相册找图片,或通过调用系统相机拍照得到图片。 容易出错的地方: 1、当我们指定了照片的uri路径,我们就不能通过data.getData();来获取uri,而应该直接拿到uri(用全局变量或者其他方式)然后设置给imageView imageView.setImageURI(uri); 2、我发现手机前置摄像头拍出来的照片只有几百KB,直接用imageView.setImageURI(uri);没有很大问题,但是后置摄像头拍出来的照片比较大,这个时候使用imageView.setImageURI(uri);就容易出现 out of memory(oom)错误,我们需要先把URI转换

Android之照相机的使用

最近在做图形处理的项目,要使用到照相机。主要实现调用图库功能打开图片或者调用照相机照相将图片返回并显示出来。下面是主要代码: package com.cloay.camera; import java.io.FileNotFoundException; import android.app.Activity; import android.app.AlertDialog; import an

小小程序员 欢迎光临!专注于移动互联网! 2040

torch.jit.script 与 torch.jit.trace

它们是 PyTorch 的即时编译(Just-in-Time Compilation)模块的一部分,用于提高模型的执行效率并支持模型的部署。方法只跟踪了给定输入张量的执行路径,因此在使用转换后的模块对象进行推理时,输入张量的维度和数据类型必须与跟踪时使用的相同。跟踪模型可以看作是一个具有相同功能的脚本模型,但它还保留了原始模型的动态特性,可以使用更多高级特性,如动态图和控制流。它接受一个模型和一个示例输入,并记录模型在给定输入上的执行过程,然后返回一个跟踪模型。的模型文件,并将其转换为评估模式。

leoatliang的博客 1万+

电磁波成像技术全解析:从γ射线到无线电波的应用实践

本文全面解析电磁波成像技术,从γ射线到无线电波的应用实践。详细介绍了不同波长电磁波的特性与实用场景,包括医疗影像、工业检测、安防监控等领域。特别探讨了X射线、红外热成像、毫米波雷达等前沿技术的实战应用,为读者提供技术选型指南和操作技巧。

weixin_29305337的博客 293

Android 图像选取 图片剪裁 照相选图 照相裁剪 图像压缩 11 - 14更新

前言本篇讲的是使用 “Intent.ACTION_PICK” 来选取图片并进行剪裁加载的操作 , 包括以下两个功能 从本地相册读取图片进行剪裁 从照相机获取图片进行剪裁 注意: 本篇使用一个工具类PickUriUtils 使Uri转换成文件路径 , 工具类在文章最后给出. 本文的Bitmap对象没有进行回收和缓存 , 在真正的使用中是需要进行相关的操作的 , 由于这里是演示 , 就不做多余的处理了.

妇校长的博客QAQ 8490

Chromatix 7实战:从零开始调优ISP模块的完整流程(附常见报错解决方案)

本文提供了高通平台Camera调试工具Chromatix 7的完整实战指南。详细阐述了从环境准备、项目初始化、基础校正(如LSC、BPC)到核心ISP管线(Demosaic、CCM、HDR)及后处理(CAC、ANR)的调优全流程,并附带了常见报错(如“未初始化实例”)的解决方案,旨在帮助工程师建立系统性的调试方法论。

weixin_29290863的博客 623

android调用系统照相机并保持图片到本地

1.调用系统照相机 // 照相 public void takePhotos(View view) { Intent cameraIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUES

lzqjfly的专栏 3995

维纳(Wiener)复原滤波器的三种推导形式及其在图像处理中的应用

本文深入解析了维纳(Wiener)复原滤波器的三种核心推导形式:卷积形式、矩阵向量形式和频域形式,并重点阐述了其基于线性最小均方误差(LMMSE)估计的核心思想。通过Python实战演示,展示了频域形式如何高效地在图像去模糊与噪声抑制之间取得平衡,是图像复原领域的经典且实用的工具。

net55的博客 578

【固态变压器(SST)全维度解析】发展历史、技术、玩家、挑战与数据中心趋势

SST正处于技术突破向规模化商用的关键过渡期,随着SiC/GaN器件降价、标准完善、可靠性数据积累,其在数据中心的渗透率将快速提升。短期(2025 - 2027年)以示范项目为主,中长期(2030年后)有望成为超大规模智算中心的主流供电方案。

昔时扬尘处 2128

android获取本地图片和照相机

代码下载:http://download.youkuaiyun.com/detail/harrycris/5601879 /* * * */ @SuppressLint("DefaultLocale") public class MainActivity extends Activity implements OnClickListener { private final i

1660

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

2301_77192876的博客 2214

安卓,上传图片不能调取照相机拍照

我们常见的上传文件或者图片 是使用的input <form> <input type="file" name="pic" id="pic" /> </form> 此时一个问题出现: 如果是上传照片图片,安卓机有一个问题,只能选取照片,不能去调取相机进行拍照。 而苹果机 ios系统的 会直接出现选择 相机拍照还是照片图库。 所以解决安卓调取照相机的问题,...

MtangEr的博客 5242

LVGL(lv_canvas)

这篇文章介绍了LVGL图形库中的lv_canvas组件,主要内容包括: lv_canvas是一个绘图缓冲区对象,提供丰富的绘图API,可以理解为LVGL的"离屏画布"。 基本使用流程:创建缓冲区->创建canvas对象->设置缓存和尺寸->进行绘图操作。 详细列举了常用的绘图函数,如绘制线条、矩形、文字、图片等。 提供了示例代码展示如何创建画布并绘制一条红色线段。 介绍了canvas的典型应用场景,如动态波形绘制、自定义控件底图等。 对比了canvas与普通img的区别

m0_49476241的博客 1030

医疗数据采集:Python爬虫爬取医学文献与药品信息(2026合规与伦理版)

医疗数据采集不同于爬取新闻或房价,它直接关系到人的生命健康和法律底线。技术层面:优先使用官方 API (PubMed E-utilities, BioThings),避免解析复杂HTML。法律层面:严守“不碰隐私、不破付费、不传谣言”三条红线。伦理层面:保持对生命的敬畏,确保数据的准确性和用途的正当性。在2026年,一个优秀的医疗数据工程师,不是那个能爬取最多数据的人,而是那个能在合规框架下,利用公开数据解决真实医疗问题的人。请务必珍视您的职业生涯和法律责任,切勿以身试法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 286

android配置照相机图片格式

Android配置照相机图片格式的实现指南 在Android应用中,配置照相机的图片格式是一个非常重要但复杂的任务。对于刚入行的小白来说,这可能会感到有些困惑。本文将详细介绍如何在Android中配置照相机图片格式,并通过具体代码示例说明每一步的实现。 整体流程 以下是配置照相机图片格式的基本流程: 步骤 描述 ...

weixin_41788814的博客 246

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android studio获取图片大小,通过AndroidStudio获取手机图片

1.从本地相册获取照片:一般就是写出这个方法 protected void getImageFromAlbum() { Intent intent = new Intent(Intent.ACTION_PICK);...1.从本地相册获取照片:一般就是写出这个方法protected void getImageFromAlbum() {Intent intent = new Intent(Inte...

weixin_33725576的博客 1207

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: android选择图片或拍照图片上传到服务器(包括上传参数)
下一篇: android 拍照上传照片
blueangle17
博客等级 码龄16年 78粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值