快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱乐博娱188下载:基于android的远程视频监控系统——实现Camera预览



如标题所述,进修若何打开摄像头,并在屏幕上预览图像。应用Camera的步骤:

(1)调用Camera的open()措施打开相机;

(2)调用Camera的getParameters()措施获取摄影参数,该措施返回一个Camera.Parameters工具;

(3)调用Camera的setParameters()措施//android2.3.3今后无需此步;

(4)调用Camera的startPreview()措施开始预览取景,在预览取景之前必要调用Camera的setPreviewDisplay(SurfaceHolder holder)措施设置应用哪个surfaceview来显示取景图片;

(5)停止法度榜样时,调用Camera的stopPreview()停止取景预览,并调用release()措施开释资本。

以上历程参考《猖狂android教材》,这本书确凿不错,能够快速入门。全部系统大年夜部分框架是参考此书的,部分问题在网上搜的资料。

1.在AndroidManifest.xml文件中添加c和记娱乐博娱188下载amera的权限

"android.permission.CAMERA" />

"android.hardware.camera" />

"android.hardware.camera.autofocus" />

2.在界面结构文件中添加一个surfaceview用于显示预览图片

android:id="@+id/sView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

/>

3.法度榜样主体

在这里我们定义了一个SurfaceView变量sView用于获取结构文件中定义的SurfaceView组件。关于SurfaceView的基础问题,这个讲的蛮好的。

我们在SurfaceView被创建时调用initcamera()初始化摄像头,在SurfaceView被销毁时开释摄像头。而这两个光阴是经由过程surfaceHolder.addCallback获得的,看看下面代码就明白了。

public class MainActivity extends Activity {

SurfaceView sView;

SurfaceHolder surfaceHolder;

int screenWidth, screenHeight;

// 定义系统所用的拍照机

Camera camera;

//是否在浏览中

boolean isPreview = false;

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

// 设置全屏

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_main);

WindowManager wm = (WindowManager) getSystemService(

Context.WINDOW_SERVICE);

Display display = wm.getDefaultDisplay();

// 获取屏幕的宽和高

screenWidth = display.getWidth();

screenHeight = display.getHeight();

// 获取界面中SurfaceView组件

sView = (SurfaceView) findViewById(R.id.sView);

// 得到SurfaceView的SurfaceHolder

surfaceHolder = sView.getHolder();

// 为surfaceHolder添加一个回调监听器

surfaceHolder.addCallback(new Callback()

{

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height)

{

}

@Override

public void surfaceCreated(SurfaceHolder holder)

{

// 打开摄像头

initCamera();

}

@Override

public void surfaceDestroyed(SurfaceHol和记娱乐博娱188下载der holder)

{

// 假如camera不为null ,开释摄像头

if (camera != null)

{

if (isPreview)

camera.stopPreview();

camera.release();

camera = null;

}

}

});

// 设置该SurfaceView自己不掩护缓冲

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

private void ini和记娱乐博娱188下载tCamera()

{

if (!isPreview)

{

camera = Camera.open();

}

if (camera != null && !isPreview)

{

try

{

Camera.Parameters parameters = camera.getParameters();

// 设置预览照片的大年夜小

parameters.setPreviewSize(screenWidth, screenHeight);

// 每秒显示4帧

parameters.setPreviewFrameRate(4);

// 设置图片款式

parameters.setPictureFormat(PixelFormat.JPEG);

// 设置JPG照片的质量

parameters.set("jpeg-quality", 85);

//设置照片的大年夜小

parameters.setPictureSize(screenWidth, screenHeight);

//android2.3.3今后无需下步

//camera.setParameters(parameters);

//经由过程SurfaceView显示取景画面

camera.setPreviewDisplay(surfaceHolde和记娱乐博娱188下载r);

// 开始预览

camera.startPreview();

// 自动对焦

camera.autoFocus(null);

}

catch (Exception e)

{

e.printStackTrace();

}

isPreview = true;

}

}

}

就这和记娱乐博娱188下载样你就可以应用摄像头预览了。当然你会发明预览的图像转了90度,偏向纰谬。我们在AndroidManifest.xml文件的activity属性设置中添加

android:screenOrientation="landscape"

设置成横屏就OK了。假如黑屏请反省camera.setParameters(parameters);这步是否与自己系统匹配,2.3.3今后是不须此步的。

就这样简单,我们就完成了无线视频监控的第一步,实现了摄像头图像的预览。在这里我们设置了预览然则却没有对每帧图像数据进行处置惩罚,下次将讲若何得到摄像头的每一帧图像以及若何处置惩罚。

下面是sdk2.3.3下的源码,在我android4.04系统的手机上也能运行。因为android开拓对象的进级,这个源码包跟曩昔版本有所不合,不知道和旧版本是否有冲突。如过不可大年夜家新建个工程,再把3个关键文件的内容复制以前应该没问题。

您可能还会对下面的文章感兴趣: