安卓开发:相机水印设置

1.更新水印

DecimalFormat DF = new DecimalFormat("#");
DecimalFormat DF1 = new DecimalFormat("#.#");LocationManager LM = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, new LocationListener() {@Overridepublic void onLocationChanged(Location location) {latitude = location.getLatitude();longitude = location.getLongitude();altitude = location.getAltitude();speed = location.getSpeed();textView_longitude.setText("经度:" + DuFenMiao(longitude));textView_latitude.setText("纬度:" + DuFenMiao(latitude));textView_altitude.setText("高度:" + DF.format(altitude) + "米");if (speed * 3.6 < 10)textView_speed.setText("速度:" + DF1.format(speed * 3.6) + "千米/时");elsetextView_speed.setText("速度:" + DF.format(speed * 3.6) + "千米/时");}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}
});

2.设置水印

class ClickListener implements View.OnClickListener {@Overridepublic void onClick(View v) {int id = v.getId();switch (id) {......case R.id.button_watermark:String[] items = { "经纬度", "高度", "速度", "时间" };boolean watermark_geo = sharedPreferences.getBoolean("watermark_geo", true);boolean watermark_altitude = sharedPreferences.getBoolean("watermark_altitude", true);boolean watermark_speed = sharedPreferences.getBoolean("watermark_speed", true);boolean watermark_time = sharedPreferences.getBoolean("watermark_time", true);boolean[] check = { watermark_geo, watermark_altitude, watermark_speed, watermark_time };new AlertDialog.Builder(MainActivity.this).setTitle("水印").setMultiChoiceItems(items, check, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i, boolean b) {SharedPreferences.Editor editor = sharedPreferences.edit();switch (i) {case 0:if (b) {textView_longitude.setVisibility(View.VISIBLE);textView_latitude.setVisibility(View.VISIBLE);} else {textView_longitude.setVisibility(View.GONE);textView_latitude.setVisibility(View.GONE);}editor.putBoolean("watermark_geo", b);break;case 1:if (b)textView_altitude.setVisibility(View.VISIBLE);elsetextView_altitude.setVisibility(View.GONE);editor.putBoolean("watermark_altitude", b);break;case 2:if (b)textView_speed.setVisibility(View.VISIBLE);elsetextView_speed.setVisibility(View.GONE);editor.putBoolean("watermark_speed", b);break;case 3:editor.putBoolean("watermark_time", b);break;}editor.apply();}}).show();break;......}}
}

3.绘制水印

public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[]data, Camera camera) {Log.e(Thread.currentThread().getStackTrace()[2] + "TakePicture", "PictureCallback");Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);Camera.CameraInfo cameraInfo = new Camera.CameraInfo();Camera.getCameraInfo(ccn, cameraInfo);        Canvas canvas = new Canvas(bitmap);canvas.drawBitmap(bitmap, 0, 0, null);//水印Paint paint = new Paint();paint.setColor(Color.WHITE);paint.setTextSize(bitmap.getWidth() / 30);if (sharedPreferences.getBoolean("watermark_geo", true)) {canvas.drawText(textView_longitude.getText().toString(), 100, bitmap.getHeight() - 4 * bitmap.getWidth() / 20, paint);canvas.drawText(textView_latitude.getText().toString(), 100, bitmap.getHeight() - 3 * bitmap.getWidth() / 20, paint);}if (sharedPreferences.getBoolean("watermark_altitude", true))canvas.drawText(textView_altitude.getText().toString(), 100, bitmap.getHeight() - 2 * bitmap.getWidth() / 20, paint);if (sharedPreferences.getBoolean("watermark_speed", true))canvas.drawText(textView_speed.getText().toString(), 100, bitmap.getHeight() - bitmap.getWidth() / 20, paint);Date date = new Date();if (sharedPreferences.getBoolean("watermark_time", true))canvas.drawText(SDF1.format(date), 100, bitmap.getHeight() - 15, paint);......}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】计算机组成原理(七)

指令系统 文章目录 指令系统7.1 机器指令7.1.1 指令的一般格式7.1.2 指令字长 7.2 操作数类型和操作类型7.2.1 操作数类型7.2.2 数据在存储器中的存放方式7.2.3 操作类型 7.3 寻址方式7.3.1 指令寻址7.3.1.1 顺序寻址7.3.1.2 跳跃寻址 7.3.2 数据寻址7.3.2.1 立即寻址7.3.2.2 直…

第四十五天 | 322.零钱兑换

题目&#xff1a;322.零钱兑换 尝试解答&#xff1a; 1.确定dp[j]含义&#xff1a;装满容量为j的背包所需要放的硬币个数为dp[j]; 2.动态转移方程&#xff1a;dp[j] dp[j - coins[i]] 1; 3.遍历顺序&#xff1a;本题应该为组合类题目&#xff0c;不考虑装入的顺序&#x…

精品PPT | 精益生产管理中MES系统的实现与应用(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 MES系统的实现与应用 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&…

吃掉 N 个橘子的最少天数(Lc1553)——记忆化搜索

厨房里总共有 n 个橘子&#xff0c;你决定每一天选择如下方式之一吃这些橘子&#xff1a; 吃掉一个橘子。如果剩余橘子数 n 能被 2 整除&#xff0c;那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除&#xff0c;那么你可以吃掉 2*(n/3) 个橘子。 每天你只能从以上 …

Redis - 缓存场景

学习资料 学习的黑马程序员哔站项目黑马点评&#xff0c;用作记录和探究原理。 Redis缓存 缓存 &#xff1a;就是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;读写性能较高 缓存常见的场景: 数据库查询加速&#xff1a;通过将频繁查询的数据缓存起来&…

【挖金子game】

如果您想要编写一个简单的“挖金子”游戏代码&#xff0c;可以使用Python这样的编程语言来实现。以下是一个简单的Python代码示例&#xff0c;用于创建一个基本的“挖金子”游戏&#xff1a; import random # 游戏设置 max_gold 10 # 最大金子数量 max_digs 5 # 最大挖掘…

数据驱动(Data-Driven)和以数据为中心(Data-Centric)的区别

一、什么是数据驱动&#xff1f; 数据驱动&#xff08;Data-Driven&#xff09;是在管理科学领域经常提到的名词。数据驱动决策&#xff08;Data-Driven Decision Making&#xff0c;简称DDD&#xff09;是一种方法论&#xff0c;即在决策过程中主要依赖于数据分析和解释&…

Java基础学习:java中的基础注解

在Java中&#xff0c;有一些内置的&#xff08;或称为“基础”&#xff09;注解&#xff08;annotation&#xff09;&#xff0c;这些注解在Java标准库中定义&#xff0c;并且具有特定的用途。以下是一些主要的Java内置注解&#xff1a; Override&#xff1a; 用于表示一个方法…

Keras深度学习框架第二十七讲:KerasTuner超参数优化基础

1、超参数优化概念 1.1 什么是超参数优化 超参数调优&#xff0c;也称为超参数优化或参数调优&#xff0c;是寻找学习算法或模型最佳超参数组合的过程。超参数是在训练过程开始之前设置的参数&#xff0c;模型无法直接从数据中学习这些参数。它们控制着学习算法的行为&#x…

NDIS小端口驱动开发(二)

初始化微型端口适配器 当网络设备可用时&#xff0c;系统会加载所需的 NDIS 微型端口驱动程序。 随后&#xff0c;即插即用 (PnP) 管理器向 NDIS 发送即插即用 IRP 来启动设备。 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数来初始化用于网络 I/O 操作的适配器。 初…

嵩山为什么称为三水之源

三水指黄河、淮河、济河&#xff0c;这三条河流环绕在嵩山周边。 黄河横亘在嵩山北部&#xff0c;其支流伊洛河从西南方环绕嵩山&#xff0c;然后汇入黄河。济河&#xff0c;古称济水&#xff0c;源自济源王屋山&#xff0c;自身河道在东晋时代被黄河夺占&#xff0c;从此消失。…

毕设 大数据校园卡数据分析

文章目录 0 前言1 课题介绍2 数据预处理2.1 数据清洗2.2 数据规约 3 模型建立和分析3.1 不同专业、性别的学生与消费能力的关系3.2 消费时间的特征分析 4 Web系统效果展示5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设…

职场不是挣钱

职场怎么不是挣钱&#xff1f; 曾经我也一直这么想&#xff0c;只要做好老板安排的事情&#xff0c;自然就可以挣到钱了。 目的应该是没错的&#xff0c;是挣钱。 只是做好活就能挣钱&#xff0c;好像想得有些简单了。 毕竟每个人都在干活&#xff0c;为什么就该自己挣钱呢&a…

【vue2配置】Vue Router

Vue Router官网 1、npm install vue-router4 2、创建模块&#xff0c;在src目录小创/views/map/MapIndex.vue模块和创router/index.js文件 3、在router/index.js配置路由 import Vue from "vue"; import Router from "vue-router"; // 引入模块 const Ma…

C语言——在头⽂件中#if、_STDC_等字⾏起什么作⽤?

一、问题 通常&#xff0c;⼀些程序员都不会去研究头⽂件中的内容是什么含义&#xff0c;总觉得乱乱的&#xff0c;有很多 #if、_STDC_、#line 等字符&#xff0c;那么这些字符都各代表什么呢&#xff0c;在头⽂件中又起到什么作⽤呢&#xff1f; 二、解答 在头⽂件中存在类似…

智慧校园建设的进阶之路

智慧校园的建设现已到达了老练的阶段&#xff0c;许多学校设备充满着数字化信息&#xff0c;进出宿舍楼&#xff0c;校园一卡通体系会记载下学生信息&#xff0c;外来人员闯入会报警&#xff0c;翻开电脑就能查到学生是否在宿舍等……学生的学习和日子都充满了数字化的痕迹。但…

C# WPF入门学习(三)

目录 核心架构 核心组件和概念 1. XAML&#xff08;eXtensible Application Markup Language&#xff09; 2. 依赖属性&#xff08;Dependency Properties&#xff09; 3. 路由事件&#xff08;Routed Events&#xff09; 4. 数据绑定 5. 命令&#xff08;Commands&…

itertools内置模块的过滤妙用

itertools内置模块的妙用 过滤源迭代器中的元素 Python内置itertools模块里有一些函数可以过滤源迭代器中的元素。 islice islice可以在不拷贝数据的前提下&#xff0c;按照下标切割源迭代器。可以只给出切割的终点&#xff0c;也可以同时给出起点和终点&#xff0c;还可以…

MongoDB 覆盖索引查询:提升性能的完整指南

MongoDB 覆盖索引查询是一种优化数据库查询性能的技术&#xff0c;它通过创建适当的索引&#xff0c;使查询可以直接从索引中获取所需的数据&#xff0c;而无需访问实际的文档数据。这种方式可以减少磁盘 I/O 和内存消耗&#xff0c;提高查询性能。 基本语法 在 MongoDB 中&a…

SQL练习题:2.4

建表 # 学生表 create table t_student (stu_id varchar(10),stu_name varchar(10),stu_age datetime,stu_sex varchar(10) );# 课程表 create table t_t_course (c_id varchar(10),c_name varchar(10),c_teaid varchar(10) );# 教师表 create table t_t_teacher (tea…