安卓开发:相机水印设置

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.rhkb.cn/news/331808.html

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

相关文章

《欢乐钓鱼大师》辅助:新手钓鱼全新攻略大全!

《欢乐钓鱼大师》是一款充满趣味和挑战的钓鱼游戏。在游戏中&#xff0c;玩家不仅可以体验钓鱼的乐趣&#xff0c;还可以通过不同的钓鱼竿和鱼卡来提升自己的钓鱼技能。为了帮助新手和老玩家更好地体验游戏&#xff0c;本文将为您提供详细的游戏攻略。 1. 游戏目标 在《欢乐钓…

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

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

【资讯】5月巴塞罗那,东胜物联边缘计算网关亮相IOTSWC AWS展台

2024年5月21-23日&#xff0c;物联网解决方案世界大会 IOT SWC 在巴塞罗那举行&#xff0c;这是数字化转型趋势和颠覆性技术的顶级盛会。 作为AWS的硬件合作伙伴&#xff0c;东胜物联网边缘计算网关DSGW-210将在AWS展台1号馆展出&#xff0c;欢迎大家前来参观。 此次东胜在AW…

FPGA之tcp/udp

在调试以太网的过程中&#xff0c;考虑了vivado IP配置(管脚、reset等)&#xff0c;SDK中PHY芯片的配置(芯片地址、自适应速率配置等)&#xff0c;但是&#xff0c;唯独忽略了tcp/udp协议&#xff0c;所以在ping通之后仍无法连接。 所以现在来学习一下tcp与udp的区别 ---- 为什…

.NET 一款内部最新的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

勒索软件分析_Conti

0. Conti介绍 勒索软件即服务&#xff08;Ransomware as a Service&#xff0c;RaaS&#xff09;变体 Conti 推出还不到两年&#xff0c;已经进行了第七次迭代。Conti被证明是一种敏捷而熟练的恶意软件威胁&#xff0c;能够自主和引导操作&#xff0c;并具有无与伦比的加密速度…

等保2.0看这一篇就够了

一、等级保护介绍 1.1什么是等级保护 网络安全等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及信息和存储、传输、处理这些信息的信息系统分等级实行安全保护&#xff0c;对信息系统中使用的信息安全产品实行按等级管理&#xff0c;对信息系统中发生的信息安…

2024年云南特岗教师报名流程,超详细,明天就开始报名哦!

2024年云南特岗教师报名流程&#xff0c;超详细&#xff0c;明天就开始报名哦&#xff01;

Android四大组件 Broadcast广播机制

一 概述 广播 (Broadcast) 机制用于进程或线程间通信&#xff0c;广播分为广播发送和广播接收两个过程&#xff0c;其中广播接收者 BroadcastReceiver 是 Android 四大组件之一。BroadcastReceiver 分为两类&#xff1a; 静态广播接收者&#xff1a;通过 AndroidManifest.xm…

SQL——SELECT相关的题目

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表&#xff08;行转列&#xff09; 1280、学生参加各科测试的次数 1068、产品销售分析I 1075、项目员工I …

Docker化Spring Boot3应用:从镜像构建到部署

随着容器化技术的发展&#xff0c;越来越多的应用采用了容器化部署的方式。容器化部署极大地减少了因部署环境不同带来的差异&#xff0c;实现了一次构建、随处运行的效果。此外&#xff0c;容器化还具有版本管理、快速启动、持续集成等优点。今天&#xff0c;我们将介绍如何在…

C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

看这两位东北圣女美吗?如何描写美女的大长腿?

看这两位东北圣女美吗&#xff1f;如何描写美女的大长腿&#xff1f; 最近署名为懂球娘娘的一篇描写东北圣女的文章火了&#xff0c;文中描述了海棠朵朵与辛芷蕾这两位娇媚动人的角色。其美艳动人的形象和魅力四溢的描写让人为之倾倒。 这种通过文字展现人物魅力的能力让人佩服…

【PostgreSQL支持中文的全文检索插件(zhparser)】

PostgreSQL本身是支持全文检索的&#xff0c;提供两个数据类型&#xff08;tsvector,tsquery&#xff09;&#xff0c;并且通过动态检索自然语言文档的集合&#xff0c;定位到最匹配的查询结果。其内置的默认的分词解析器采用空格进行分词&#xff0c;但是因为中文的词语之间没…

Day06:Flex 布局

目标&#xff1a;熟练使用 Flex 完成结构化布局 一、标准流 标准流也叫文档流&#xff0c;指的是标签在页面中默认的排布规则&#xff0c;例如&#xff1a;块元素独占一行&#xff0c;行内元素可以一行显示多个。 二、浮动 1、基本使用 作用&#xff1a;让块元素水平排列。 …

Linux——进程信号

目录 一、信号的理解 二、信号的种类 2.1 标准信号 (1-31) 2.2 实时信号 (通常是34及以上) 三、信号的产生 3.1 用户通过终端产生信号 3.1.1 signal 函数 3.1.2 demo 测试 3.1.3 demo 现象 3.2 通过系统函数产生信号 3.2.1 demo 测试 3.3 由软件条件产生信号 3.3.1…

uni-app App端实现文字语音播报(Ba-TTS)

前言 最近在遇到消息提示语音播放出来&#xff0c;查了一圈文档发现并没有自带api 后面想起支付宝收钱播报&#xff0c;不受限与系统环境和版本环境&#xff08;后面查阅他是音频实现的&#xff09; 如果是由安卓端需要语音播放功能-直接使用Ba-TTs救急&#xff08;需要付费2…

MTK下载AP

只升级选Firemare Upgrade &#xff0c;点下载后&#xff0c;关机下插入USB

CSP俄罗斯方块(简单易懂)

开始将题目理解成了&#xff0c;开始的列应该是从输入图案的最左端开始计算&#xff0c;将前面所有的空列都删掉&#xff0c;代码如下&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e410; const int M 1e510; int a[20][20]; int b[5][5];int…

Java的类和对象

Java的类和对象 前言一、面向过程和面向对象初步认识C语言Java 二、类和类的实例化基本语法示例注意事项 类的实例化 三、类的成员字段/属性/成员变量注意事项默认值规则字段就地初始化 方法static 关键字修饰属性代码内存解析 修饰方法注意事项静态方法和实例无关, 而是和类相…