安卓开发:相机水印设置
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);......}
};
相关文章:

安卓开发:相机水印设置
1.更新水印 DecimalFormat DF new DecimalFormat("#"); DecimalFormat DF1 new DecimalFormat("#.#");LocationManager LM (LocationManager)getSystemService(Context.LOCATION_SERVICE); LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2…...
Excel工作表单元格单击选中事件,VBA动态数值排序
Excel工作表单元格单击选中事件,VBA动态数值排序(WX公众号:Excel潘谆白说VBA) 文章目录 前言一、运行效果二、代码前言 面对每月的消费账单,面对月底待还的信用卡或花呗,面对不足三位数的余额,你是否怀疑过账单自己的消费。你是否因此开始记账,每个月记流水,想知道当月…...

数据结构~~链式二叉树
目录 一、基本概念 链式存储概念 二、链式二叉树的结构 链式二叉树结构 构建链式二叉树 二叉树的遍历 二叉树节点和高度等 二叉树销毁 三、链式二叉树的练习 相同的树 对称二叉树 另外一颗子树 二叉树前序遍历 二叉树遍历 四、完整代码 Tree.h Tree.c 五、总结 一…...

线程池,日志
所要用到的知识点: 多线程的创建 生产消费模型, 线程锁 条件变量 代码: 线程池日志...
vue的图片上传
关于vue3的图片上传,这里记录一下,有兴趣的朋友可以参考。。。。 <van-uploader:after-read"afterRead"v-model"headImg":max-count"1"class"picture"/> const fileList ref();const afterRead (fil…...
题解 P1150
题解 P1150 因为k个烟蒂1根烟1个烟蒂 所以k-1个烟蒂1根烟 注意减掉最后一根烟的烟蒂 (因这题并没有借烟蒂换烟再还回这一说) 此解法为小学4~6年级水平 #include <bits/stdc.h>using namespace std;int main(){int n,k;cin>>n>>k;cout<<n(n-1)/(k-…...

牛客NC324 下一个更大的数(三)【中等 双指针 Java/Go/PHP/C++】参考lintcode 52 · 下一个排列
题目 题目链接: https://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199 思路 第一步:获取数字上每一个数,组成数组arr 第二步:利用“下一个排列” 问题解题方法来继续作答,步骤:利用lintc…...

Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”
文章目录 前言背景问题描述解决方案总结 前言 在使用 Vue 3 开发项目时,遇到“找不到模块 ‘/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题,确保…...
nginx的Connection refused
问题描述 nginx的错误日志中突然出现大量的的Connection refused问题,日志如下: 2020/03/19 09:52:53 [error] 20117#20117: *7403411764 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xxx.xxx, server:…...
Haskell 的高阶函数(Higher-order functions)
本节继续介绍Haskell的知识,本节内容介绍的是高阶函数(Higher-order functions)的概念和应用。高阶函数是指能够接受其他函数作为参数,或者返回函数作为结果的函数。 Functions as values(函数作为值)&…...
Unity websocket客户端
🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎目标:服务器和客户端可以实时的传输信息 ☀️实现目标: 使用的w…...

每日一题——博弈论(枚举与暴力)
博弈论 题目描述 运行代码 #include<iostream> #include<vector> using namespace std; int main(){int n;cin >> n;vector<int> d(n,0);for(int i 0;i < n;i){cin >> d[i];}vector<int> in(1000,0);for(int k 1;k<3;k){for(int…...

pytorch笔记:torch.nn.Flatten()
1 介绍 torch.nn.Flatten(start_dim1, end_dim-1) 将一个连续的维度范围扁平化为一个张量 start_dim (int)要开始扁平化的第一个维度(默认值 1)end_dim (int)要结束扁平化的最后一个维度(默认值 -1) 2 举例 input torch.ra…...

一个人应该怎么操作抖音小店呢?店铺操作流程给你讲解清楚!
大家好,我是电商小V 现在入驻抖音小店的有很多新手,新手最关心的就是一个人应该如何操作抖音小店,操作抖音小店需要做好哪几步呢?关于这个问题咱们就来详细的讲解一下, 第一点:开店 开店是做店的第一步&…...

“等保测评与安全运维的协同:保障企业网络安宁
"等保测评与安全运维的协同:保障企业网络安宁"是一个涉及信息安全领域的重要话题。这里,我们可以从几个方面来探讨这个主题。 1. 等保测评(等级保护测评) 等保测评,即信息安全等级保护测评,是依…...

python抽取pdf中的参考文献
想将一份 pdf 论文中的所有参考文献都提取出来,去掉不必要的换行,放入一个 text 文件,方便复制。其引用是 ieee 格式的,形如: 想要只在引用序号(如 [3])前换行,其它换行都去掉&…...

Java进阶学习笔记21——泛型概念、泛型类、泛型接口
泛型: 定义类、接口、方法的时候,同时声明了一个或者多个类型变量(如: <E>),称之为泛型类、泛型接口、泛型方法,我们统称之为泛型。 说明这是一个泛型类。 如果不使用泛型,我们可以往ArrayList中传…...
第二天-⑦前后端需要注意的事项
①防xss跨站脚本攻击...
Socket 函数详细讲解(Socket编程步骤、socket函数、TCP和UDP的区别)
Socket 函数详细讲解和 C 示例 一、 Socket 基本概念1. Socket 简介2. Socket 编程步骤3. TCP Socket 编程示例服务器端客户端 4. 详细说明 二、 socket 函数1. domain 通讯的协议家族2. type 数据传输的类型3. protocol 最终使用的协议返回值示例 三、TCP 和 UDP的区别1. TCP&…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...