package cn.sun.picture;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.AssetFileDescriptor;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.ToneGenerator;
import android.os.Bundle;
import android.os.Environment;
import android.os.Vibrator;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.Toast;
/**
* 照相机
*/
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private SurfaceView surfaceView;
private Camera camera;
private ImageButton startCaemraBtn;
private ImageButton flashModeBtn;
// Popwindow显示
private PopupWindow tipPopupWindow;
private RelativeLayout layout;
private ListView listView;
private String title[] = { "自动", "开启", "关闭" };
private AudioManager mAudioManager;
private int ringMode;
public static Bitmap prviewImageBitMap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window = getWindow();
requestWindowFeature(Window.FEATURE_NO_TITLE);
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.main);
initView();
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
setRingMode(mAudioManager.getRingerMode());
Toast.makeText(MainActivity.this, "进入无声拍照模式!", Toast.LENGTH_SHORT)
.show();
}
// 初始化界面的UI
private void initView() {
startCaemraBtn = (ImageButton) findViewById(R.id.startCameraBtn);
flashModeBtn = (ImageButton) findViewById(R.id.flashModeBtn);
startCaemraBtn.setOnClickListener(new startCameraOnClick());
flashModeBtn.setOnClickListener(new flashModeCameraOnClick());
SharedPreferences sharedPreferences = getSharedPreferences(
"issetValueXml", Context.MODE_PRIVATE);
int i = sharedPreferences.getInt("onoff", 0);
if (i == 0) {
flashModeBtn.setBackgroundResource(R.drawable.flashmode_auto);
} else if (i == 1) {
flashModeBtn.setBackgroundResource(R.drawable.flashmode_open);
} else if (i == 2) {
flashModeBtn.setBackgroundResource(R.drawable.flashmode_off);
}
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceView.getHolder().setFixedSize(surfaceView.getWidth(),
surfaceView.getHeight());
// 设置SurfaceHolder对象的类型
surfaceView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 指定用于捕捉拍照事件的SurfaceHolder.Callback对象
surfaceView.getHolder().addCallback(new SurfaceCallback());
}
// 回调接口
private final class SurfaceCallback implements SurfaceHolder.Callback {
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
camera = Camera.open();
camera.setDisplayOrientation(90);
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Camera.Parameters parameters = camera.getParameters();
// 根据屏幕方向设置预览尺寸
parameters.setPreviewSize(display.getWidth(), display.getHeight());
// 下面的参数有可能导致某些手机花屏(后续解决)
parameters.setPreviewFrameRate(3);
// 设置照片格式
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.set("jpeg-quality", 85);
// 设置拍摄照片的实际分辨率,本例中的分辨率是1024×768
parameters.setPictureSize(display.getWidth() / 2,
display.getHeight() / 2);
/*
* if
* (MainActivity.this.getResources().getConfiguration().orientation
* != Configuration.ORIENTATION_LANDSCAPE) { // 如果是竖屏
* parameters.set("orientation", "portrait");
* camera.setDisplayOrientation(90); } else {
* parameters.set("orientation", "landscape");
* camera.setDisplayOrientation(0); }
*/
// 设置保存的图像大小
camera.setParameters(parameters);
try {
// 设置用于显示拍照影像的SurfaceHolder对象
camera.setPreviewDisplay(surfaceView.getHolder());
camera.startPreview();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
// 回调接口
private final class TakePictureCallback implements PictureCallback {
// 该方法用于处理拍摄后的照片数据
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.v("--------", "执行");
mAudioManager.setRingerMode(getRingMode());
// data参数值就是照片数据,将这些数据以key-value形式保存,以便其他调用该Activity的程序可以获得照片数据
try {
Matrix matrix = new Matrix();
matrix.reset();
matrix.setRotate(90);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
setPrviewImageBitMap(bitmap);//为预览提供一个BitMap(转换)
Intent intent = new Intent(MainActivity.this,
PreviewImageView.class);
startActivity(intent);
// 停止照片拍摄
camera.stopPreview();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
// 无声处理
ShutterCallback sc = new ShutterCallback() {
@Override
public void onShutter() {
Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
vibrator.vibrate(100);
}
};
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
// 结束拍照
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
// success为true表示对焦成功
if (success) {
SharedPreferences sharedPreferences = getSharedPreferences(
"issetValueXml", Context.MODE_PRIVATE);
int i = sharedPreferences.getInt("onoff", 2);
if (i == 0) {
Camera.Parameters parameters = camera
.getParameters();
parameters
.setFlashMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
} else if (i == 1) {
Camera.Parameters parameters = camera
.getParameters();
parameters
.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
camera.setParameters(parameters);
![avatar](https://profile-avatar.csdnimg.cn/a1e22b8af6174f729054a946560f6bf4_s13166803785.jpg!1)
金枝玉叶9
- 粉丝: 227
- 资源: 7637
最新资源
- springboot097大学生竞赛管理系统_zip.zip
- springboot096基于springboot的租房管理系统_zip.zip
- springboot092安康旅游网站的设计与实现_zip.zip
- springboot099大型商场应急预案管理系统_zip.zip
- springboot100精准扶贫管理系统_zip.zip
- 基于51单片机的温度报警器C程序设计及Proteus仿真报告:按键设置温度上下限,超限蜂鸣器报警功能实现,基于51单片机的温度报警器C程序设计及Proteus仿真报告:按键设置温度上下限,智能报警提醒
- springboot102基于web的音乐网站_zip.zip
- java项目之宠物诊所系统设计源码.zip
- springboot104学生网上请假系统设计与实现_zip.zip
- springboot113健身房管理系统_zip.zip
- springboot105基于保信息学科平台系统设计与实现_zip.zip
- springboot117基于SpringBoot的企业资产管理系统_zip.zip
- springboot118共享汽车管理系统_zip.zip
- springboot116基于java的教学辅助平台_zip.zip
- 高频方波电压注入模型:静止坐标下电流分量提取与无感速度矢量控制,高频方波电压注入模型:静坐标下电流分量提取与无感速度矢量控制技术,该模型在d轴注入高频的方波电压,在静止坐标下通过前后周期的电电流相应提
- log库,谷歌软件开发日志库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)