当前位置: 首页 > news >正文

安卓开发:相机水印设置

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 五、总结 一…...

线程池,日志

所要用到的知识点&#xff1a; 多线程的创建 生产消费模型&#xff0c; 线程锁 条件变量 代码&#xff1a; 线程池日志...

vue的图片上传

关于vue3的图片上传&#xff0c;这里记录一下&#xff0c;有兴趣的朋友可以参考。。。。 <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 · 下一个排列

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199 思路 第一步&#xff1a;获取数字上每一个数&#xff0c;组成数组arr 第二步&#xff1a;利用“下一个排列” 问题解题方法来继续作答&#xff0c;步骤&#xff1a;利用lintc…...

Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”

文章目录 前言背景问题描述解决方案总结 前言 在使用 Vue 3 开发项目时&#xff0c;遇到“找不到模块 ‘/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题&#xff0c;确保…...

nginx的Connection refused

问题描述 nginx的错误日志中突然出现大量的的Connection refused问题&#xff0c;日志如下&#xff1a; 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的知识&#xff0c;本节内容介绍的是高阶函数&#xff08;Higher-order functions&#xff09;的概念和应用。高阶函数是指能够接受其他函数作为参数&#xff0c;或者返回函数作为结果的函数。 Functions as values&#xff08;函数作为值&#xff09;&…...

Unity websocket客户端

&#x1f3c6; 个人愚见&#xff0c;没事写写笔记 &#x1f3c6;《博客内容》&#xff1a;Unity3D开发内容 &#x1f3c6;&#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f50e;目标&#xff1a;服务器和客户端可以实时的传输信息 ☀️实现目标&#xff1a; 使用的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)要开始扁平化的第一个维度&#xff08;默认值 1&#xff09;end_dim (int)要结束扁平化的最后一个维度&#xff08;默认值 -1&#xff09; 2 举例 input torch.ra…...

一个人应该怎么操作抖音小店呢?店铺操作流程给你讲解清楚!

大家好&#xff0c;我是电商小V 现在入驻抖音小店的有很多新手&#xff0c;新手最关心的就是一个人应该如何操作抖音小店&#xff0c;操作抖音小店需要做好哪几步呢&#xff1f;关于这个问题咱们就来详细的讲解一下&#xff0c; 第一点&#xff1a;开店 开店是做店的第一步&…...

“等保测评与安全运维的协同:保障企业网络安宁

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

python抽取pdf中的参考文献

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

Java进阶学习笔记21——泛型概念、泛型类、泛型接口

泛型&#xff1a; 定义类、接口、方法的时候&#xff0c;同时声明了一个或者多个类型变量&#xff08;如: <E>&#xff09;,称之为泛型类、泛型接口、泛型方法&#xff0c;我们统称之为泛型。 说明这是一个泛型类。 如果不使用泛型&#xff0c;我们可以往ArrayList中传…...

深入理解计算机系统 家庭作业4.55

...

第二天-⑦前后端需要注意的事项

①防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&…...

鸿蒙_使用组件导航Navigation搭建应用框架

组件导航封装了页面、标题、菜单栏、工具栏等功能&#xff0c;我们只需要进行简单的设置&#xff0c;就能快速搭建应用的框架&#xff0c;我们直接新建一个独立页面来通过组件导航实现主页、设置页、我的页三个示例页面&#xff0c;并且相互之间可以跳转&#xff0c;并且天然支…...

Stable-Diffusion-v1-5-archiveWebUI插件开发指南:Python扩展接口与SDK文档

Stable-Diffusion-v1-5-archive WebUI插件开发指南&#xff1a;Python扩展接口与SDK文档 1. 引言&#xff1a;为什么需要开发自己的WebUI插件&#xff1f; 如果你已经用了一段时间的Stable Diffusion v1.5 Archive&#xff0c;可能会发现一个痛点&#xff1a;每次生成图片都要…...

如何快速检测微信单向好友:免费工具WechatRealFriends使用完全指南

如何快速检测微信单向好友&#xff1a;免费工具WechatRealFriends使用完全指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRea…...

手把手教你用XML为RimWorld Mod添加第一个新物品:从Defs文件到游戏内生效全流程

从零开始为RimWorld Mod添加自定义武器&#xff1a;XML实战指南 第一次打开RimWorld的Mod文件夹时&#xff0c;那些密密麻麻的XML文件可能让人望而生畏。但别担心——每个资深Mod作者都经历过这个阶段。今天我们就用最直观的方式&#xff0c;带你完成第一个可运行的物品Mod&…...

bitcoin-arbitrage自动化交易实战:TraderBot和TraderBotSim详解

bitcoin-arbitrage自动化交易实战&#xff1a;TraderBot和TraderBotSim详解 【免费下载链接】bitcoin-arbitrage Bitcoin arbitrage - opportunity detector 项目地址: https://gitcode.com/gh_mirrors/bi/bitcoin-arbitrage 在加密货币交易领域&#xff0c;利用不同交易…...

思源宋体终极指南:7种免费商用字体助你提升设计品质

思源宋体终极指南&#xff1a;7种免费商用字体助你提升设计品质 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼吗&#xff1f;思源宋体这款由…...

终极指南:如何利用Java热更新技术实现3倍开发效率提升?

终极指南&#xff1a;如何利用Java热更新技术实现3倍开发效率提升&#xff1f; 【免费下载链接】HotswapAgent Java unlimited redefinition of classes at runtime. 项目地址: https://gitcode.com/gh_mirrors/ho/HotswapAgent 在Java开发过程中&#xff0c;频繁的代码…...

Wan2.1 VAE技术解析:深入理解变分自编码器的核心原理

Wan2.1 VAE技术解析&#xff1a;深入理解变分自编码器的核心原理 最近在和一些开发者朋友交流时&#xff0c;发现大家对Wan2.1这类模型背后的VAE&#xff08;变分自编码器&#xff09;技术很感兴趣&#xff0c;但一看到“变分”、“KL散度”这些词就有点发怵。其实&#xff0c…...

状态反馈极点配置实战:从可控性判断到反馈增益计算

1. 状态反馈极点配置入门指南 第一次接触状态反馈极点配置时&#xff0c;我也被那些专业术语搞得晕头转向。但后来发现&#xff0c;这其实就是给系统"调音"的过程 - 就像给音响设备调整高低音旋钮一样&#xff0c;我们可以通过调整反馈增益来改变系统的动态特性。 为…...

SITS东南亚本地化失败案例复盘,37天重构AI模型适配流程——奇点大会唯一授权披露的应急响应SOP

第一章&#xff1a;奇点智能技术大会&#xff1a;SITS系列品牌的全球化布局 2026奇点智能技术大会(https://ml-summit.org) SITS&#xff08;Singularity Intelligence Technology Series&#xff09;作为奇点智能技术大会核心孵化的技术品牌矩阵&#xff0c;已形成覆盖算法研…...