package com.example;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.Size;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
class Preview extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = "Preview";
SurfaceHolder mHolder;
public Camera camera;
IGetFrameData getFrameData;
int w=240;
int h=320;
Preview(Context context,IGetFrameData iGetFrameData) {
super(context);
getFrameData=iGetFrameData;
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, acquire the camera and tell it where
// to draw.
Log.d(TAG,"surfaceCreated");
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
FileOutputStream outStream = null;
getFrameData.OnGetFrame(data, w, h);
Preview.this.invalidate();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// Surface will be destroyed when we return, so stop the preview.
// Because the CameraDevice object is not a shared resource, it's very
// important to release it when the activity is paused.
Log.d(TAG,"surfaceDestroyed");
camera.stopPreview();
camera.release();//加上这句,就OK!
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
Log.d(TAG,"surfaceChanged");
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
// parameters.set("orientation", "portrait");
// parameters.setRotation(90);
parameters.set("camera-id",2);
camera.setParameters(parameters);
camera.startPreview();
parameters = camera.getParameters();
List<Size> allSize= parameters.getSupportedPreviewSizes();
for(int i=0;i<allSize.size();i++)
{
Size cuSize=allSize.get(i);
Log.d(TAG,"support w is "+cuSize.width+" h is "+cuSize.height);
}
Size preSize= parameters.getPreviewSize();
w=preSize.width;
h=preSize.height;
Log.d(TAG,"w is "+Integer.toString(w)+" h is "+Integer.toString(h));
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
Paint p= new Paint(Color.RED);
Log.d(TAG,"draw");
canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p );
}
}
android 摄像头开发相关源代码
4星 · 超过85%的资源 需积分: 9 13 浏览量
2011-05-03
10:41:20
上传
评论 3
收藏 38KB ZIP 举报
yewenpeng1
- 粉丝: 6
- 资源: 30
最新资源
- 电力场景设备漏油检测数据集VOC+YOLO格式338张1类别.7z
- 基于yolov8+pyqt5实现精美界面支持图片视频和摄像检测源码.zip
- 用C语言为母亲节献上一份特别的祝福.zip
- LCD1602液晶显示屏的深入探索与实用指南.zip
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的恶劣天气交通标志识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的霍夫曼变换的表盘示数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的车道线识别系统 +源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页