自制Camera例子——相机效果
来源:互联网 发布:数据黑产吧 编辑:程序博客网 时间:2024/06/05 09:15
首先查询相机支持的所有效果列表。然后迭代遍历效果列表,判断是否有我们想要的效果。
MainActivity:
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { private SurfaceView camera_view; private Camera camera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); camera_view = (SurfaceView) findViewById(R.id.camera_view); SurfaceHolder holder = camera_view.getHolder(); holder.addCallback(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); Camera.Parameters parameters = camera.getParameters(); String selectedEffect = Camera.Parameters.EFFECT_NONE; //noinspection SimplifiableIfStatement switch (id) { case R.id.effect_none: selectedEffect = Camera.Parameters.EFFECT_NONE; break; case R.id.effect_mono: selectedEffect = Camera.Parameters.EFFECT_MONO; break; case R.id.effect_negative: selectedEffect = Camera.Parameters.EFFECT_NEGATIVE; break; case R.id.effect_solarize: selectedEffect = Camera.Parameters.EFFECT_SOLARIZE; break; case R.id.effect_sepia: selectedEffect = Camera.Parameters.EFFECT_SEPIA; break; case R.id.effect_posterize: selectedEffect = Camera.Parameters.EFFECT_POSTERIZE; break; case R.id.effect_whiteboard: selectedEffect = Camera.Parameters.EFFECT_WHITEBOARD; break; case R.id.effect_blackboard: selectedEffect = Camera.Parameters.EFFECT_BLACKBOARD; break; case R.id.effect_aqua: selectedEffect = Camera.Parameters.EFFECT_AQUA; break; } //获取相机所支持的效果列表,设置效果 List<String> colorEffects = parameters.getSupportedColorEffects(); Iterator<String> colors = colorEffects.iterator(); while (colors.hasNext()) { String currentEffect = colors.next(); if (currentEffect.equals(selectedEffect)) { parameters.setColorEffect(currentEffect); break; } } camera.setParameters(parameters); return super.onOptionsItemSelected(item); } @Override public void surfaceCreated(SurfaceHolder holder) { camera = Camera.open(); try { Camera.Parameters parameters = camera.getParameters(); //设置显示试图,显示视图 if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { //设置相机方向,钟祥 parameters.set("orientation", "portrait"); camera.setDisplayOrientation(90); //对于Android 2.2及以上版本 parameters.setRotation(90); } else { //横向 parameters.set("orientation", "landscape"); camera.setDisplayOrientation(0); //对于Android 2.2及以上版本 parameters.setRotation(90); } camera.setParameters(parameters); camera.setPreviewDisplay(holder); } catch (Exception e) { camera.release(); e.printStackTrace(); } camera.startPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); ; camera.release(); camera = null; } @Override protected void onDestroy() { if (camera != null) { camera.stopPreview(); camera.release(); camera = null; } super.onDestroy(); }}
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.my.camerademo.MainActivity" tools:showIn="@layout/activity_main"> <SurfaceView android:id="@+id/camera_view" android:layout_width="match_parent" android:layout_height="match_parent" /></RelativeLayout>
Demo下载
0 0
- 自制Camera例子——相机效果
- 自制Camera例子——更改摄像头预览大小
- 自制Camera例子——捕获和保存图片
- Camera Projection——相机投影
- MATLAB Camera Calibrator——相机标定
- 【android学习之十五】——多媒体2:相机Camera
- android开发——自定义相机(Camera)开发总结
- 自制Android相机
- Android API Guide for Media and Camera(五)—— 媒体与相机(Camera API)
- Android API Guide for Media and Camera(一)—— 媒体与相机(媒体播放器)
- Android API Guide for Media and Camera(三)—— 媒体与相机(ExoPlayer)
- Camera Calibration 相机标定
- Camera Calibration 相机标定
- Android Camera 相机常见问题
- Camera相机API
- GPS Camera网络相机
- Camera calibration(相机校正)
- Camera Calibration 相机标定
- SpringMVC开发笔记
- 2016/5/27 1004. 简单减法
- Qt之自定义布局管理器(QCardLayout)
- 通过命令的方式实现计算机定时关机
- sas:主成分分析
- 自制Camera例子——相机效果
- 问题:In IOS8 wakeups limit
- Solr -- 查询语法/参数
- js一键复制,Clipboard.js:不用Flash实现剪贴板功能的轻量级JavaScript库
- 修改postgres时区
- 前端开发笔记--关于插件
- VS2013常用快捷键
- 修改document.domain会引起的问题
- android studio 没有自动提示