public class Main extends Activity implements SurfaceHolder.Callback,
OnClickListener, PictureCallback {
private Camera camera;// 相机
private boolean isboolean = true;
public static final int ITEM0 = Menu.FIRST;
public static final int ITEM1 = Menu.FIRST + 1;
public static final int ITEM2 = Menu.FIRST + 2;
byte[] data;
SurfaceView surfaceView;
ImageButton take_btn;// 拍照
ImageButton tool_btn;// 工具
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);//
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
getView();// 实例化
surfaceView.getHolder().setFixedSize(320, 240); // 设置分辨率
surfaceView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().addCallback(this);// 回调
}
public void getView() {
surfaceView = (SurfaceView) findViewById(R.id.surface_camera);
take_btn = (ImageButton) findViewById(R.id.shutter);
tool_btn = (ImageButton) findViewById(R.id.finish);
take_btn.setOnClickListener(this);
tool_btn.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.shutter:// 拍照
camera.takePicture(null, null, this);
break;
case R.id.finish:// 工具
Main.super.openOptionsMenu();// 打开菜单
break;
default:
break;
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// 在界面尺寸改变时被调用,设置相机的参数(大小,格式)
if (isboolean) {
camera.stopPreview();
}
// 相机参数设置
Camera.Parameters para = camera.getParameters();
para.setPictureFormat(PixelFormat.JPEG);
para.setPreviewSize(w, h);
para.setPictureSize(640, 480);// 照片大小
para.set("rotation", 90);
camera.setParameters(para);
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();
isboolean = true;
}
public void surfaceCreated(SurfaceHolder holder) {
// 界面创建时被调用,一般是用来,打开相机,设置预览
camera = Camera.open();// 不能放在构造函数里,否则产生不了预览效果
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
isboolean = false;
camera.release();
}
private Dialog buildDialog(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("是否储存照片");
builder.setPositiveButton("存储", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
savepicture(data);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
camera.startPreview();
}
});
return builder.create();
};
public Dialog onCreateDialog(int i) {
switch (i) {
case 1:
return buildDialog(Main.this);
}
return null;
};
@SuppressWarnings("static-access")
public void savepicture(byte[] _data) {
String string = null;
// 获取系统时间,并格式化
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int year = calendar.get(Calendar.YEAR);
int mounth = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(calendar.HOUR);
int min = calendar.get(calendar.MINUTE);
int secound = calendar.get(calendar.SECOND);
// 格式一:2011-11-1 12-12-66 作为文件名
String formateDate1 = String.valueOf(year) + "-"
+ String.valueOf(mounth) + "-" + String.valueOf(day) + " "
+ String.valueOf(hour) + "-" + String.valueOf(min) + "-"
+ String.valueOf(secound);
// 格式二:2011年11月1日 12时12分45秒 写在照片上
String formateDate2 = String.valueOf(year) + "年"
+ String.valueOf(mounth) + "月" + String.valueOf(day) + "日 "
+ String.valueOf(hour) + "时" + String.valueOf(min) + "分"
+ String.valueOf(secound) + "秒";
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HHmmss");
// String date = sdf.format(new Date());
try {
Bitmap bitmap = BitmapFactory.decodeByteArray(_data, 0,
_data.length);
Bitmap newbitmap = dateBitmap(bitmap, formateDate2);
String photoName = formateDate1 + ".jpg";// 照片名称
string = photoName;
File file = new File(Utils.getSDPath(), photoName);// 创建图片文件
FileOutputStream outStream = new FileOutputStream(file);
newbitmap.compress(CompressFormat.JPEG, 100, outStream);
outStream.close();
camera.stopPreview();
camera.startPreview();// 开始预览
} catch (Exception e) {
}
Toast.makeText(Main.this, "照片存储路径:" + Utils.getSDPath() + "/" + string,
2000).show();
}
// 往照片上写入日期
private Bitmap dateBitmap(Bitmap bitmap, String date) {
if (bitmap == null) {
return null;
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
// 创建一个空白的bitmap
Bitmap newbitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
Canvas canvas = new Canvas(newbitmap);
canvas.drawBitmap(bitmap, 0, 0, null);// 在 0,0坐标开始画入src
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
paint.setTextSize(25);
// canvas.drawText(date, 80, 50, paint);//居顶
canvas.drawText(date, 80, 620, paint);// 居底
canvas.save(Canvas.ALL_SAVE_FLAG);// 保存
canvas.restore();// 存储
return newbitmap;
}
public void onPictureTaken(byte[] _data, Camera camera) {
data = _data;
showDialog(1);// 弹出对话框,提示是否要保存图片
}
// Menu菜单
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, ITEM0, 0, "相册");
menu.add(0, ITEM2, 2, "退出");
menu.findItem(ITEM1);
return true;
}
// Menu菜单点击事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case ITEM0:// 相册
Intent intent = new Intent(Main.this, Album.class);
startActivity(intent);
break;
case ITEM2:// 退出
finish();
break;
}
return super.onOptionsItemSelected(item);
}
}
分享到:
相关推荐
图表分类ppt
资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立
BDE_Installer_for_RAD_Studio_10.2_Tokyo.7z
箭头指向中心PPT模板素材
永磁同步电机MTPA控制仿真模型和矢量控制仿真模型,模型全部自己搭建,控制策略采用离散模型仿真,仿照真实微控制器的控制,该模型采用固定的电机参数计算出电流参考值,后期会开发出电机磁饱和交叉耦合变参数的仿真模型,图一为idiq电流真实值随负载的变化的控制波形,图二为MTPA和矢量控制的电流幅值的波形对比,该模型真实度极高,电流环转速环带宽可调,响应快慢可以自己设计。
五项说明关联关系PPT素材
图表分类ppt
突出显示强调关系PPT模板素材
springboot项目基于Spring Boot的民宿租赁系统的设计与实现,含有完整的源码和报告文档
MATLAB代码:基于数据驱动的中央空调系统可控潜力评估 关键词:数据驱动 中央空调 需求响应 可控潜力评估 编程语言:matlab平台 内容简介: 代码主要做的是住宅空调负荷的可调度潜力评估,因为住宅空调负荷是一种具有一定灵活性和可控性的需求响应资源,本代码首先评估单一客户的空调可控潜力,进而发展为大规模地区的空调的需求响应潜力以及规模的评估。 采用静态和动态模型参数估计的分段分析方法,深入分析了ACLs的消费行为,并针对不同时间尺度的需求响应问题,以成本效益为目标,优化空调负荷的需求响应行为。 最后以实际的算例数据,验证了所提出方法的准确性和鲁棒性,代码出图效果极好,而且研究的问题比较全面,适合在此基础上稍加修改形成自己的成果
量产汽车VCU控制策略模型及文档+2份 两个vcu模型 第一个模型为量产项目模型,纯电动车VCU控制策略模型,包含纯电动汽车完整控制策略模块,按autosar价格建模,可以进行代码生成,详细见图片。 第二个模型:包含相关模型设计说明文档
偏移容忍度谐振补偿网络方设计方法研究 simulink仿真实现。 磁耦合谐振式无线电能传输中,相控电容式补偿方法研究 simulink仿真实现
这个饮料销售数据集是研究饮料行业的宝贵资源,它模拟了真实的销售场景,涵盖了众多关键信息。数据集包含10个主要字段,分别是订单ID、客户ID、客户类型(B2B或B2C)、产品名称、产品类别、单价、购买数量、产品折扣、折扣后的总价、客户所在地区以及订单日期。这些字段共同构成了一个全面的销售数据框架,为多维度的分析提供了可能。 从客户类型来看,B2C客户占比64%,而B2B客户占36%,且B2B客户通常能获得折扣,这一特点为分析不同客户群体的销售策略和利润贡献提供了重要依据。 在价格方面,单价和总价的分布范围相当广泛,单价从0.32到超过100不等,总价的分布也呈现出类似的广泛性,这为探究价格与销售量之间的复杂关系、定价策略的有效性等关键问题提供了丰富的数据样本。 总体而言,这个数据集为饮料行业的市场分析、销售策略制定、客户细分研究、产品定价优化以及区域市场拓展等多方面研究提供了极具价值的数据基础。它能够帮助相关企业和研究人员深入洞察饮料销售的各个环节,从而做出更加科学、合理的决策,推动饮料行业的发展。
springboot项目基于Web的课程设计选题管理系统,含有完整的源码和报告文档
TMS WEB Cor0820(中文版).docx
电力系统调度 源荷不确定性matlab 程序语言:matlab+yalmip(可适用cplex或者gurobi作为求解器) 关键词:优化调度 源荷不确定性 模糊机会约束 碳交易 内容:参照考虑源荷两侧不确定性的含风电的低碳调度,引入模糊机会约束,程序包括储能、风光、火电机组及水电机组,解决了目标函数含有分类特征的约束问题、非线性约束 目标的线性转化问题,且考虑了机组的启停时间约束,目标函数考虑运行成本、弃风弃光和碳成本。 优势:有详细的资料,程序完整性好、模块化编程、注释逻辑分明、方便学习
springboot项目基于springboot的招聘系统的设计与实现,含有完整的源码和报告文档
几行简单判断闰年平年的代码
基于微信小程序的校园疫情防控管理平台设计与实现.docx
股票因子数据,包括了13411个研究分析股票的因子