拍照
2016-03-12 09:19
615 查看
横向,全屏,摄像头权限
<activity android:name=".MainActivity"
android:label="@string/app_name" android:screenOrientation="landscape">
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.main);
<uses-permission android:name="android.permission.CAMERA"/>
使用了surfaceview控件,
.Camera.takePicture(ShutterCallback shutter,
PictureCallback raw,
PictureCallback jpeg)
该方法三个参数都为回调方法,最后一个为压缩后的图片,因为处理是异步的,该方法后不能立刻使用camera.startPreview()方法,容易黑屏,应该在回调方法完成后执行,进而防止照片不动
public class MainActivity extends Activity {
private View layout;
private Camera camera;
@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.main);
layout = this.findViewById(R.id.buttonlayout);
SurfaceView surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setFixedSize(176, 144);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceCallback());
}
public void takepicture(View v){
if(camera!=null){
switch (v.getId()) {
case R.id.takepicture:
camera.takePicture(null, null, new MyPictureCallback());
break;
case R.id.autofocus:
camera.autoFocus(null);
break;
}
}
}
.Camera.takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg)
该方法三个参数都为回调方法,最后一个为压缩后的图片,因为处理是异步的,该方法后不能立刻使用camera.startPreview()方法,容易黑屏,应该在回调方法完成后执行,进而防止照片不动
<activity android:name=".MainActivity"
android:label="@string/app_name" android:screenOrientation="landscape">
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.main);
<uses-permission android:name="android.permission.CAMERA"/>
使用了surfaceview控件,
.Camera.takePicture(ShutterCallback shutter,
PictureCallback raw,
PictureCallback jpeg)
该方法三个参数都为回调方法,最后一个为压缩后的图片,因为处理是异步的,该方法后不能立刻使用camera.startPreview()方法,容易黑屏,应该在回调方法完成后执行,进而防止照片不动
public class MainActivity extends Activity {
private View layout;
private Camera camera;
@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.main);
layout = this.findViewById(R.id.buttonlayout);
SurfaceView surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setFixedSize(176, 144);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceCallback());
}
public void takepicture(View v){
if(camera!=null){
switch (v.getId()) {
case R.id.takepicture:
camera.takePicture(null, null, new MyPictureCallback());
break;
case R.id.autofocus:
camera.autoFocus(null);
break;
}
}
}
.Camera.takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg)
该方法三个参数都为回调方法,最后一个为压缩后的图片,因为处理是异步的,该方法后不能立刻使用camera.startPreview()方法,容易黑屏,应该在回调方法完成后执行,进而防止照片不动
private final class MyPictureCallback implements PictureCallback{ public void onPictureTaken(byte[] data, Camera camera) { try { File jpgFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg"); FileOutputStream outStream = new FileOutputStream(jpgFile); outStream.write(data); outStream.close(); camera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } }
private final class SurfaceCallback implements Callback{ public void surfaceCreated(SurfaceHolder holder) { try{ camera = Camera.open();//打开摄像头 Camera.Parameters parameters = camera.getParameters(); //Log.i("MainActivity", parameters.flatten()); parameters.setPreviewSize(800, 480); parameters.setPreviewFrameRate(5); parameters.setPictureSize(1024,768); parameters.setJpegQuality(80); camera.setParameters(parameters); camera.setPreviewDisplay(holder); camera.startPreview();//开始预览 }catch (Exception e) { e.printStackTrace(); } } public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { } public void surfaceDestroyed(SurfaceHolder holder) { if(camera!=null){ camera.release(); camera = null; } } } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ layout.setVisibility(ViewGroup.VISIBLE); return true; } return super.onTouchEvent(event); } }
相关文章推荐
- cmd mysql导入数据库报错Unkonwn command ‘\''’ 或 Unkonwn command ‘\n''’
- android提升之旅
- bzoj1038: [ZJOI2008]瞭望塔
- 使用LineNumberReader方法来实现读取文件的方法
- java的不同验证器 validator
- 全面解读python web 程序的9种部署方式
- 自定义一个缓冲区的大小
- machine learning - apriori
- iOS应用崩溃日志解密
- 使用reader来模拟BufferedReader方法操作
- elasticsearch通过persistent修改集群设置所在文件
- AlphaGo GITHUB
- 基于人吃饭的例子设计一个装饰设计模式:
- 3*3矩阵转置
- 一句话理解innerHeight,(document.documentElement,document.body) / clientHeight,offsetHeight的区别和用法
- matlab 图像fft
- PHP路径相关 dirname,realpath,__FILE__
- 第二周学习进度
- 杨幂win7主题
- ubuntu14.04安装搜狗输入法错误