初始化相机
private void initCamera() {
setContentView(R.layout.main);
btnTake = (Button) this.findViewById(R.id.take);
btnTake.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
camera.autoFocus(new AutoFocusCallback());
}
});
Display display = getWindowManager().getDefaultDisplay();
surfaceView = (SurfaceView) this.findViewById(R.id.mSurfaceView1);
surfaceView.getHolder().setFixedSize(display.getWidth(),
display.getHeight()); // 设置分辨率
/* 下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 */
surfaceView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().addCallback(new SurfaceCallback());
}
回调函数类
private final class SurfaceCallback implements SurfaceHolder.Callback {
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
// parameters.setPreviewSize(1024, 768);//设置预览照片的大小
// parameters.setPreviewFrameRate(3);//每秒3帧
parameters.setPictureFormat(PixelFormat.JPEG);// 设置照片的输出格式
parameters.set("jpeg-quality", quality);// 照片质量
parameters.setPictureSize(photoWidth, photoHeight);// 设置照片的大小
parameters.set("orientation", "landscape");
// parameters.set("orientation", "portrait");
// parameters.set("rientation", "90");
// camera.setDisplayOrientation(90);
// parameters.set("rotation", "180");
// parameters.set("orientation", "landscape");
parameters.setRotation(180);
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());// 通过SurfaceView显示取景画面
camera.startPreview();// 开始预览
preview = true;
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
if (preview)
camera.stopPreview();
camera.release();
}
}
}
自动对焦
private final class AutoFocusCallback implements Camera.AutoFocusCallback {
@Override
public void onAutoFocus(boolean success, Camera camera) {
camera.takePicture(null, null, new TakePictureCallback());
}
}
拍照保存
private final class TakePictureCallback implements PictureCallback {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
File file = new File(temPath);
FileOutputStream outStream = new FileOutputStream(file);
// Bitmap 旋转
Matrix vMatrix = new Matrix();
vMatrix.setRotate(270);
Bitmap vB2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap
.getWidth() // 宽度
, bitmap.getHeight() // 高度
, vMatrix, true);
vB2.compress(CompressFormat.JPEG, 100, outStream);
outStream.close();
camera.stopPreview();
// savePhoto();
setReview();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
分享到:
相关推荐
在Android应用开发中,调用系统相机拍照是一项常见的功能,用户可以使用手机摄像头捕捉图片,然后将图片数据返回到应用程序中。本篇文章将详细介绍如何在Android应用中实现这一功能,特别是静默拍照的方法。 首先,...
在Android应用开发中,调用系统相机拍照是一个常见的功能需求,尤其对于社交、影像记录类的应用来说至关重要。本文将详细讲解如何在Android中实现这一功能,以帮助开发者更高效地进行应用开发。 首先,我们需要在...
总结来说,Android调用相机拍照、view截屏和无预览静默拍照是Android应用开发中的高级功能,它们涉及到Android的多媒体处理、系统权限和设备硬件交互等多个方面。理解并熟练掌握这些技术,能帮助开发者构建更加丰富...
以上代码片段展示了如何在Android应用中获取手机姿态数据并写入文本文件,同时实现调用系统相机进行拍照并保存图片的功能。这涉及到Android的传感器API、文件操作以及相机Intent的使用,是Android开发中常见且实用的...
在Android应用开发中,调用系统相机拍照是常见的功能,用户可以通过这个功能快速获取图片。下面我们将详细讲解如何在Android中实现这一功能。 首先,我们需要创建一个方法来启动相机。在提供的代码片段中,`...
在Android平台上,开发自定义照相机应用是一项常见的任务,它允许开发者根据特定需求定制相机功能和用户界面。本文将深入探讨如何实现这样一个自定义照相机实例,包括界面设计、权限管理、相机操作以及图片处理等...
自Android OS 2.0版本开始,Google提供了官方支持的照相API,这为开发者提供了开发自定义照相机应用的可能性。到了Android OS 2.3版本,进一步增强了对多摄像头的支持,允许应用程序选择并配置不同的摄像头。这对于...
- Android中可以通过调用系统相机应用来拍摄新照片,使用`Intent.ACTION_IMAGE_CAPTURE`启动相机。 - 为了提供更好的用户体验,也可以自定义相机界面,利用`Camera` API 或 `CameraX` 进行深度集成,控制拍照参数...
从Android 2.3(API Level 9)开始,系统提供了Camera类,允许开发者直接控制相机硬件。而在Android 4.2(API Level 17)之后,引入了Camera2 API,这是一个更高级、更灵活的接口,能够提供更多的相机控制选项。 1....
总结,"TakePicture"示例程序是一个基础的Android相机拍照应用,它展示了如何使用Android原生Camera API来实现简单的拍照功能。通过深入理解这个例子,开发者可以以此为基础,构建更复杂的相机应用,满足更多元化的...
在Android应用开发中,调用系统相册、相机以及拍照后进行裁剪是常见的功能需求,用于用户选择或拍摄头像等。本篇文章将详细讲解如何在Android项目中实现这一系列操作。 首先,我们需要在布局文件中设置好相关的UI...
在Android平台上,实现拍照上传功能是一项常见的需求,尤其在开发社交、电商或任何需要用户上传图片的应用中。这个"AndroidProject安卓项目实现拍照上传的代码片段.zip"文件提供了一个具体的实现示例,可以帮助...
在Android应用开发中,自定义相机功能是一项常见的需求。然而,开发者在实现这一功能时可能会遇到各种问题,其中最令人头疼的就是相机预览界面出现黑屏的现象。本篇文章将深入探讨这个问题,分析其原因,并提供相应...
在Android平台上,开发一款应用允许用户同时预览前后摄像头是一项技术挑战。这个"Android前后摄像头同时预览"项目,通过提供的DoubleCameraDemo源代码,展示了如何实现在特定设备(如红米3S和乐视2)上同时开启并...
在Android平台上,相机控制是应用程序开发中的一个重要领域,它涵盖了拍照、录像以及一系列与图像捕捉相关的功能。本文将深入探讨如何在Android应用中实现相机控制,包括摄像和录像功能。 一、Android相机API概述 ...
在Android应用开发中,相机功能是非常常见且重要的。本文将详细介绍如何自定义Android应用程序中的照相机功能。首先,我们来看一下启动相机的两种主要方法: 1. 直接启动系统相机: 这是最简单的方式,通过Intent来...
在Android平台上,开发一款简单的照相机程序涉及到对Android系统相机API的使用,主要涉及以下几个关键知识点: 1. **SurfaceView**: `SurfaceView`是Android中用于处理多媒体数据(如视频和图像)的一种视图组件。...
在Android平台上,拍照和聚焦音是用户在使用相机功能时经常能够听到的声音。正常情况下,当用户触发相机进行拍摄时,设备会播放一个抓拍声音,而当用户在触摸屏幕进行对焦时,设备也会播放一个聚焦声音。然而,在...
首先,**拍照**功能通常通过调用Android系统的相机应用来完成。这需要创建一个Intent,并设置其类型为图像捕获。以下是关键代码片段: ```java Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_...
在Android平台上,为相机添加滤镜效果是一项常见的需求,它能极大地提升用户的拍照体验和应用的趣味性。本文将深入探讨如何使用Java代码实现在Android上实现图片滤镜功能。 首先,我们需要理解滤镜的基本原理。滤镜...