安卓基础(悬浮窗和摄像)
ACTION_MANAGE_OVERLAY_PERMISSION
的作用就是 打开系统设置的「悬浮窗权限管理页面」
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" + getPackageName())
);
startActivity(intent);
直接跳转目标应用的权限页
Uri.parse("package:" + getPackageName())
的作用是直接把用户带到 当前应用的悬浮窗权限设置页,而不是让用户在系统设置中手动寻找。
Settings.canDrawOverlays(this)
—— 检查有没有「贴纸许可证」
从A页面使用startActivityForResult()跳转到B页面,B页面点击返回时将新写入的值传回到A页面。
startActivityForResult
的作用
-
启动子 Activity 并等待结果
当需要从另一个 Activity 获取数据(如用户选择照片、输入文本等)时,使用此方法启动子 Activity。子 Activity 关闭后,父 Activity 的onActivityResult()
方法会被调用,接收返回的数据。 -
数据双向传递
普通startActivity
只能单向传递数据(父 → 子),而startActivityForResult
支持子 Activity 将数据回传(子 → 父)。
为什么需要请求码(Request Code)?
请求码是一个 唯一整型标识符,用于在父 Activity 中区分不同的子 Activity 请求。它的必要性体现在以下场景:
-
多个子 Activity 返回结果到同一个父 Activity
例如,父 Activity 同时启动“选择图片”和“拍照”两个子 Activity,两者都可能返回图片数据。通过不同的请求码,父 Activity 可以判断数据来源并做相应处理。 -
同一子 Activity 多次启动
若多次启动同一个子 Activity(如多次选择不同文件),请求码可帮助区分是哪一次调用返回的结果。
创建悬浮窗(Floating Window)
-
createFloatingWindow()
- 悬浮窗参数:使用
TYPE_APPLICATION_OVERLAY
类型,允许悬浮在其他应用上方。 - 视图布局:加载
R.layout.floating_window
,包含“截图”和“确认”按钮。 - 拖动逻辑:通过
OnTouchListener
实现悬浮窗的拖拽移动。 - 按钮交互:
- 截图按钮:点击后显示可调整的截图框(
showCaptureFrame()
)。 - 确认按钮:点击后执行截图(
takeScreenshot()
),并切换按钮状态。
- 截图按钮:点击后显示可调整的截图框(
- 悬浮窗参数:使用
设置按钮点击事件
截图按钮点击
captureButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showCaptureFrame(); // 显示截图框confirmButton.setVisibility(View.VISIBLE); // 显示确认按钮captureButton.setVisibility(View.GONE); // 隐藏截图按钮}
});
- 功能:点击后显示截图框,并切换按钮状态,让用户确认截图区域。
确认按钮点击
confirmButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {takeScreenshot(); // 执行截图confirmButton.setVisibility(View.GONE); // 隐藏确认按钮captureButton.setVisibility(View.VISIBLE); // 显示截图按钮}
});
- 功能:触发截图操作,并在截图完成后恢复按钮初始状态。
showCaptureFrame()
创建截图框布局参数
captureParams = new WindowManager.LayoutParams(800, // 初始宽度(像素)600, // 初始高度(像素)WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, // 类型:系统悬浮窗WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // 标志:不获取焦点PixelFormat.TRANSLUCENT // 透明背景
);
captureParams.gravity = Gravity.TOP | Gravity.START; // 定位基准:左上角
captureParams.x = 100; // 初始X坐标(距离屏幕左边缘100像素)
captureParams.y = 100; // 初始Y坐标(距离屏幕顶部100像素)
- TYPE_APPLICATION_OVERLAY:Android 8.0+ 的悬浮窗类型。
- FLAG_NOT_FOCUSABLE:允许用户操作穿透截图框,避免影响其他应用。
加载截图框布局
captureFrame = LayoutInflater.from(this).inflate(R.layout.capture_frame, null);
final View resizeHandle = captureFrame.findViewById(R.id.resizeHandle); // 调整大小的手柄视图
final FrameLayout captureArea = captureFrame.findViewById(R.id.captureArea); // 可拖动的区域
- 布局文件:
R.layout.capture_frame
定义截图框的UI结构(如边框、调整手柄)。 - 视图元素:
resizeHandle
:用于拖动调整截图框大小的手柄(通常位于右下角)。captureArea
:用户可拖动的区域(通常是截图框的整个区域)。
代码注释原理
// 创建ImageReader实例,用于从Surface中读取图像数据
imageReader = ImageReader.newInstance(screenWidth, // 图像宽度(屏幕宽度)screenHeight, // 图像高度(屏幕高度)PixelFormat.RGBA_8888, // 像素格式(32位RGBA,每个通道8位)1 // 缓冲区数量(仅保留最新一帧)
);// 创建VirtualDisplay虚拟显示设备,将屏幕内容投射到ImageReader的Surface
virtualDisplay = mediaProjection.createVirtualDisplay("Screenshot", // 虚拟显示名称(任意标识符)screenWidth, // 显示宽度(与屏幕一致)screenHeight, // 显示高度(与屏幕一致)screenDensity, // 显示密度(像素密度DPI)DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, // 标志位(自动镜像显示方向)imageReader.getSurface(), // 输出目标Surface(绑定到ImageReader)null, // 回调接口(此处未使用)handler // 事件处理器(指定操作线程)
);// 延迟300毫秒执行截图操作,等待屏幕内容稳定
handler.postDelayed(new Runnable() {@Overridepublic void run() {Image image = null;try {// 从ImageReader获取最新的图像对象image = imageReader.acquireLatestImage();if (image != null) {// 获取图像平面数据(RGBA格式只有一个平面)Image.Plane[] planes = image.getPlanes();// 获取第一个平面的像素缓冲区ByteBuffer buffer = planes[0].getBuffer();// 单个像素的字节跨度(RGBA_8888格式为4字节)int pixelStride = planes[0].getPixelStride();// 每行的字节跨度(可能包含填充字节)int rowStride = planes[0].getRowStride();// 计算行填充字节数(实际数据宽度与声明的宽度差异)int rowPadding = rowStride - pixelStride * screenWidth;// 创建全屏位图(考虑行填充调整实际宽度)Bitmap fullScreenBitmap = Bitmap.createBitmap(screenWidth + rowPadding / pixelStride, // 调整后的宽度screenHeight, // 高度不变Bitmap.Config.ARGB_8888 // 配置为ARGB_8888格式);// 将缓冲区数据复制到位图中fullScreenBitmap.copyPixelsFromBuffer(buffer);// 保存全屏截图到公开相册目录saveScreenshot(fullScreenBitmap, "Fullscreen_" + System.currentTimeMillis() + ".jpg", true);// 创建调试用的全屏截图副本Bitmap debugCopy = fullScreenBitmap.copy(Bitmap.Config.ARGB_8888, true);saveDebugScreenshot(debugCopy, "fullscreen_" + System.currentTimeMillis() + ".jpg");// 在调试截图上绘制用户选择的红色选框debugCopy = fullScreenBitmap.copy(Bitmap.Config.ARGB_8888, true);Canvas canvas = new Canvas(debugCopy); // 创建画布Paint paint = new Paint(); // 创建画笔paint.setColor(Color.RED); // 设置红色paint.setStyle(Paint.Style.STROKE); // 描边样式paint.setStrokeWidth(10); // 线宽10像素canvas.drawRect(captureX, captureY, // 绘制矩形框captureX + captureWidth, captureY + captureHeight, paint);saveDebugScreenshot(debugCopy, "marked_" + System.currentTimeMillis() + ".jpg");// 计算合法的裁剪区域(防止超出屏幕边界)int x = Math.max(0, captureX); // X起点不小于0int y = Math.max(0, captureY); // Y起点不小于0int width = Math.min(captureWidth, screenWidth - x); // 宽度不超过屏幕右侧int height = Math.min(captureHeight, screenHeight - y); // 高度不超过屏幕底部// 尝试裁剪指定区域Bitmap croppedBitmap = null;try {croppedBitmap = Bitmap.createBitmap(fullScreenBitmap, // 源位图x, y, // 起始坐标width, height // 裁剪尺寸);Log.d(TAG, "成功裁剪: x=" + x + ", y=" + y + ", width=" + width + ", height=" + height);} catch (IllegalArgumentException e) {// 处理非法参数异常(如负坐标或超界)Log.e(TAG, "裁剪失败: " + e.getMessage() + ", 尝试默认值");// 使用默认居中区域(800x600)width = Math.min(800, screenWidth);height = Math.min(600, screenHeight);x = (screenWidth - width) / 2; // 水平居中y = (screenHeight - height) / 2;// 垂直居中croppedBitmap = Bitmap.createBitmap(fullScreenBitmap, x, y, width, height);}// 释放全屏位图内存fullScreenBitmap.recycle();if (croppedBitmap != null) {// 保存裁剪后的截图到相册saveScreenshot(croppedBitmap, "Cropped_" + System.currentTimeMillis() + ".jpg", false);croppedBitmap.recycle(); // 释放裁剪位图内存} else {Toast.makeText(FloatingWindowService.this, "截图失败:无法裁剪图像", Toast.LENGTH_SHORT).show();}} else {Toast.makeText(FloatingWindowService.this, "截图失败:无法获取图像", Toast.LENGTH_SHORT).show();}} catch (Exception e) {// 捕获并记录所有异常Log.e(TAG, "Error capturing screen", e);Toast.makeText(FloatingWindowService.this, "截图失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();} finally {// 确保资源释放if (image != null) {image.close(); // 关闭Image对象}// 恢复截图框可见if (captureFrame != null) {captureFrame.setVisibility(View.VISIBLE);}// 恢复确认按钮可见Button confirmButton = floatingView.findViewById(R.id.confirmButton);if (confirmButton != null) {confirmButton.setVisibility(View.VISIBLE);}// 释放MediaProjection相关资源releaseMediaProjection();isCapturing = false; // 重置截图状态}}
}, 300); // 延迟300毫秒执行
123
启动截图 → 初始化MediaProjection → 创建VirtualDisplay → 延迟捕获图像 → 处理像素数据 → 裁剪区域 → 保存结果 → 清理资源
123
相关文章:
安卓基础(悬浮窗和摄像)
ACTION_MANAGE_OVERLAY_PERMISSION 的作用就是 打开系统设置的「悬浮窗权限管理页面」 Intent intent new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" getPackageName()) ); startActivity(intent); 直接跳转目标应用的权限…...
一种实波束前视扫描雷达目标二维定位方法——论文阅读
一种实波束前视扫描雷达目标二维定位方法 1. 专利的研究目标与实际问题意义2. 专利提出的新方法、模型与公式2.1 运动平台几何建模与回波信号构建2.1.1 距离历史建模2.1.2 回波信号模型2.2 距离向运动补偿技术2.2.1 匹配滤波与距离压缩2.3 加权最小二乘目标函数2.3.1 方位向信号…...
基于springboot的金院银行厅预约系统的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 随着信息技术在管理上越来越深入而广泛的应用,信息管理系统的实施在技术上已逐步成熟。信息管理系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的…...
AVFormatContext 再分析零
随着对于AVFormatContext 各个参数的学习,逐渐可以从 整体架构上 再认识一下 AVFormatContext 了。 还是从解封装的第一步开始。 int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); 实际上…...
【学习心得】魔塔(ModelScope)和抱抱脸(Hugging Face)下载模型小细节
介绍常用的两种在模型社区如魔塔(ModelScope)和抱抱脸(Hugging Face),下载预训练模型的方法,然后说明各种方法里面的小细节。 一、SDK下载 对于希望直接通过编程方式集成模型下载功能到自己的项目中的开发…...
嵌入式硬件篇---STM32 系列单片机型号命名规则
文章目录 前言一、STM32 型号命名规则二、具体型号解析1. STM32F103C8T6F103:C:8:T6:典型应用2. STM32F103RCT6F103:R:C:T6:典型应用三、命名规则扩展1. 引脚数与封装代码2. Flash 容量代码3. 温度范围代码四、快速识别技巧性能定位:F1/F4后缀差异硬件设计参考:引脚数…...
关于算法设计与分析——拆分表交换问题
题目: 用蛮力法设计一个算法,将A{a1, a2, ..., an}拆成B和C两个表,使A中值大于等于0的元素存入表B,值小于0的元素存入表C,要求表B和C不另外设置存储空间而利用表A的空间。 1)问题分析 题目要求设计一个算…...
在pycharm profession 2020.3上离线安装.whl类型的包(以PySimpleGUI为例)
今天写个小代码,用到了PySimpleGUI。 在pycharm profession 2020.3的项目中的Terminal里运行如下代码即可安装。 python3 -m pip install --force-reinstall --extra-index-url https://PySimpleGUI.net/install PySimpleGUI 安装方法如图: 安装后使用…...
c++回调函数
函数指针 //函数 bool lengthCompare(const string&, const string&); //pf为指针,指向一个函数,函数的类型为:bool (const string&, const string&) bool (*pf)(const string&, const string&); //函数࿰…...
mysql主从复制搭建,并基于Keepalived + VIP实现高可用
以下是基于 Keepalived VIP 实现 MySQL 主从复制高可用的详细步骤,涵盖主从复制搭建与故障自动切换: 一、MySQL 主从复制搭建(基础步骤回顾) 1. 主库(Master)配置 修改配置文件 /etc/my.cnf&…...
时间交织(TIADC)的失配误差校正处理(以4片1GSPS采样率的12bitADC交织为例讲解)
待写…有空再写,有需要的留言。 存在失配误差的4GSPS交织 校正完成后的4GSPS交织...
K8S自动弹性伸缩机制详解
Kubernetes (K8S) 自动弹性伸缩机制详解 Kubernetes 通过多种控制器和指标系统实现 自动弹性伸缩,主要包括 Pod水平伸缩(HPA)、垂直伸缩(VPA)、集群节点伸缩(CA) 三种方式。以下是核心机制和实…...
C++模版结构体的使用
1. convert_pointer 结构体模板 template<typename _SourceIterator, typename _DestT> struct convert_pointer {typedef typename convert_pointer<typename _SourceIterator::pointer, _DestT>::type type; };作用 这是一个递归模板,用于处理 _Sou…...
WebRTC 服务器之Janus架构分析
1. Webrtc三种类型通信架构 1.1 1 对 1 通信 1 对 1 通信模型设计的主要⽬标是尽量让两个终端进⾏直联,这样即可以节省服务器的资源,⼜可以提⾼ ⾳视频的服务质量。WebRTC ⾸先尝试两个终端之间是否可以通过 P2P 直接进⾏通信,如果⽆法直接…...
音视频开发成长之路与音视频知识总结
音视频开发曾经是一个富有挑战性和技术深度的领域。我来分享整理音视频开发的成长路径和知识体系: 音视频开发成长路线图 1. 基础阶段(1-3个月) 计算机基础:C/C、数据结构、操作系统音视频基础概念:采样率、比特率、…...
batch normalization和layer normalization区别
Normalization无非就是这样一个操作: 其中x是输入数据,维度为(B,T,C),其中B是batchsize,T是序列长度,C是embedding维度;括号内是标准化操作,γ和…...
Android Compose 层叠布局(ZStack、Surface)源码深度剖析(14)
Android Compose 层叠布局(ZStack、Surface)源码深度剖析 一、引言 在 Android 应用开发领域,用户界面(UI)的设计与实现一直是至关重要的环节。随着技术的不断演进,Android Compose 作为一种全新的声明式…...
数据仓库方法论书籍及其阅读建议
A、关于数据仓库方法论的各书籍详细分析及汇总 1. 《Building the Data Warehouse (Third Edition)》 by W.H. Inmon 核心观点 企业级数据仓库(EDW):自上而下的架构,采用第三范式(3NF)模型&…...
数据库 1.0
数据库就是放数据的地方 程序里面的数据就是暂时性的 要是想把数据永久性的储存 MySQL是典型的C / S架构 Client 云端 Sever 服务端 数据库服务的开启和关闭 可以在这里选择关闭开启,关闭之后就无法通过终端再连接mysql了 通过命令行的方式开启和关闭mysql&…...
给QCustomPlot添加一个QScrollBar滚动条、限制缩放范围、自动设置大小和右边栏垂直缩放
实现效果 实现思路 从QCustomPlot类派生一个类,进行个性化设置,在轴矩形的上边设置Margin,放一个滚动条,设置滚动条的样式 常量定义 #define NQSCRB 1000构造函数初始化 // 设置QScrollBar的样式// 顶部空--5,左侧空--6...
计算机系统结构 第二章 :缓存优化
零-1:复习cache的基础知识: 一、映像方式 直接映射 原理:主存被分成若干区,每个区大小与 Cache 相同,区内再分块,主存每个区中块的大小和 Cache 中块大小相等,且每个区包含的块数也与 Cache 中块数相等。主存中任意…...
软件工程实践
例一 用例文档 UC1注册 执行者 潜在会员 前置条件 潜在会员访问系统 后置条件 系统已记录注册信息 涉众利益 潜在会员——希望注册尽量简单,希望自己的信息不会泄露 商店——希望获得尽可能多的未来客户信息,特别是联系方法 基本路径 1.潜在会员请求注册…...
将Airtable导入NocoDB
将Airtable导入NocoDB 0. 前提条件1. 详细步骤 NocoDB提供了一种简化流程,可在几分钟内将您的Airtable数据库无缝转移到各种数据库管理系统,包括MySQL、Postgres和SQLite。此功能特别适合希望将Airtable数据库迁移到更强大且可扩展的数据库管理系统中的用…...
【云备份】服务端数据管理模块设计与实现
目录 一、要管理的数据 二、如何管理数据 三.数据管理类的设计 3.1.数据信息结构体的设计 3.2.数据管理类的设计 四.数据管理类实现 4.1.数据信息结构体的数据填充 4.2.数据管理类的实现 五. 源代码测试 数据管理模块:需要管理的数据有哪些,而…...
Qt开发:按钮类的介绍和使用
文章目录 一、命令按钮类 (QPushButton)1.1 基本功能介绍1.2 常用构造函数1.3 常用方法1.4 信号与槽使用示例1.5 开关按钮(Checkable)1.6 创建出菜单按钮(Menu Button) 二、工具按钮类 (QToolBu…...
Clickhouse基于breakpad生成minidump文件,方便问题定位
背景 breakpad能够在程序崩溃的时候自动生成一个mini的core文件,能够帮助进行问题定位,但是clickhouse对于集成breappad的难度较大 查看github发现之前有大佬基于以前的分支有个MR,但是一直没有合并到社区,想来是有什么其他的原因…...
华为云Astro轻应用自定义连接器对接OBS云对象存储操作指南
操作难点图例(详细见下文详细操作步骤) 操作成功图例 说明:以下是通过自定义连接器创建新的OBS桶的图例 说明:以下是通过自定义连接器将数据内容嵌入创建新的OBS桶的图例 操作难点图例 说明:连接器编排需要注意的是动作选择、输入参数的设置等...
C# 运算符重载深度解析:从基础到高阶实践
运算符重载是 C# 中一项强大的特性,它允许开发者为用户自定义类型定义运算符的行为,使得代码更直观、更符合领域逻辑。本文将通过理论解析与实战示例,全面讲解运算符重载的实现规则、适用场景及注意事项。 一、运算符重载的核心概念 1. 什么…...
面试现场“震”情百态:HashMap扩容记
(以下为符合要求的文章内容) 【场景】 2024年秋招季某互联网大厂会议室 面试官:张工(P8级架构师) 求职者:马小帅(双非二本应届生) 第一轮提问(Java基础篇) …...
SCAU18124--N皇后问题
18124 N皇后问题 时间限制:5000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC Description 有N*N的国际象棋棋盘,要求在上面放N个皇后,要求任意两个皇后不会互杀,有多少种不同的放法? 输入格式 …...
MySQL 分库分表
对于使用 MySQL 作为数据库管理系统的应用来说,当数据量达到一定规模时,单库单表的架构会面临性能瓶颈,如查询缓慢、写入性能下降等问题。为了解决这些问题,可以使用分库分表技术。 二、为什么需要分库分表 2.1 单库单表的局限性…...
滑动窗口leetcode 904
代码: class Solution { public:int totalFruit(vector<int>& fruits) {int n fruits.size();unordered_map<int,int> window_type_count;int left 0;int ans 0;for(int right 0; right <n;right){while(window_type_count.size() 2 &&…...
用Maven定位和解决依赖冲突
用Maven定位和解决依赖冲突 一、依赖冲突的常见表现二、定位冲突依赖的4种方法2.1 使用Maven命令分析依赖树2.2 使用IDE可视化工具2.3 使用Maven Enforcer插件2.4 运行时分析 三、解决依赖冲突的5种方案3.1 排除特定传递依赖3.2 统一指定版本(推荐)3.3 使…...
八大排序之选择排序
本篇文章将带你详细了解八大基本排序中的选择排序 目录 (一)选择排序的时间复杂度和空间复杂度及稳定性分析 (二)代码实现 (三)输出结果 选择排序的基本原理是:每次从待排序的数组中找出最大值和最小值。具体流程是…...
SVM实战:从理论到鸢尾花数据集的分类可视化
SVM实战:从理论到鸢尾花数据集的分类可视化 在机器学习的广阔领域中,支持向量机(Support Vector Machine,SVM)作为一种经典且强大的分类算法,备受瞩目。它凭借独特的思想和卓越的性能,在模式识…...
深入解析 Stacking:集成学习的“超级英雄联盟
在机器学习的世界里,我们常常面临一个挑战:单一模型往往难以完美地解决复杂问题。就像漫威电影中的超级英雄们一样,每个模型都有自己的独特能力,但也有局限性。那么,如何让这些模型“联手”发挥更大的力量呢࿱…...
C# 编程核心:控制流与方法调用详解
在编程中,控制流和方法调用是构建程序逻辑的两大基石。它们决定了代码的执行顺序和模块化协作方式。本文将从基础概念出发,结合代码示例,深入解析这两部分内容。 控制流:程序执行的指挥棒 控制流决定了代码的执行路径࿰…...
PyTorch_张量基本运算
基本运算中,包括add, sub, mul, div, neg等函数,以及这些函数的带下划线的版本add_, sub_, mul_, div_, neg_, 其中带下划线的版本为修改原数据。 代码 import torch import numpy as np # 不修改原数据的计算 def test01():data torch.randint(0, 10…...
C++负载均衡远程调用学习之订阅功能与发布功能
目录 1.lars-DnsV0.1回顾 2.Lars-DnsV0.2-订阅功能的订阅模块分析 3.Lars-DnsV0.2-订阅模块的类的单例创建及方法属性初始化 4.Lars-DnsV0.2-发布功能的实现 5.Lars-DnsV0.2-发布功能的总结 6.Lars-DnsV0.2-订阅流程复习 7.Lars-DnsV0.2-订阅模块的集成 8.Lars-DnsV0.2订…...
接口测试的核心思维(基础篇)
1.为什么会进行接口测试? 早期发现问题,降低修复成本 当我们服务端已经完成,而前端还未进行开发的时候。我们可以通过接口测试避免前端的交互直接进行服务端的测试。 接口测试也能够更早介入项目的测试,降低修复成本。 提高测试…...
给文件内容加行号
题目: 给定一个文件,通过文件读写,给文件内容加行号。 行号形式如: 1:) xxXXXX 2:) xxxxXX 要求: 使用缓冲流操作。 思路分析: 程序定义了两个字符串变量 inputFile 和 outputFile,分别存储输入文件的路径…...
【计算机视觉】三维重建: MVSNet:基于深度学习的多视图立体视觉重建框架
MVSNet:基于深度学习的多视图立体视觉重建框架 技术架构与核心算法1. 算法流程2. 关键创新 环境配置与实战指南硬件要求安装步骤数据准备(DTU数据集) 实战流程1. 模型训练2. 深度图推断3. 点云生成 常见问题与解决方案1. CUDA内存不足2. 特征…...
终端与环境变量
一、我的电脑是Win10的,首先打开终端如下: 此时终端来到C:\Users\lenovo的目录下,可以访问该目录下的所有文件(夹)。另外,除了这个之外,终端还可以访问环境变量中的所有文件(夹&…...
使用线性表实现通讯录管理
目录 🚀前言🦜任务目标🌟顺序表实现🐍链表实现 🚀前言 大家好!我是 EnigmaCoder。 本文介绍线性表的实验,使用顺序表和链表实现通讯录管理,包含初始化、插入、删除、查询、输出。 &a…...
机器学习常用评价指标
1. 指标说明 (1) AccuracyClassification(准确率) • 计算方式:accuracy_score(y_true, y_pred) • 作用: 衡量模型正确预测的样本比例(包括所有类别)。 公式: Accuracy TP TN TP TN FP…...
基于ArduinoIDE的任意型号单片机 + GPS北斗BDS卫星定位
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.1 器件选择1.2 接线方案 二、驱动实现2.1 核心代码解析(arduino/ESP32-S3) 三、坐标解析代码四、典型问题排查总结 前言 北斗卫星导航…...
CGAL:创建点、线、三角形及其距离、关系
CGAL(Computational Geometry Algorithms Library,计算几何算法库)是一个强大的开源库,为众多几何计算问题提供了高效的解决方案,在计算几何领域应用广泛。以下将基于提供的代码示例,详细介绍如何利用 CGAL…...
STM32基础教程——软件I2C
目录 前言 I2C MPU6050 技术实现 原理图 连线图 代码实现 技术要点 I2C初始化 SCL输出和SDA输入输出控制 起始信号 停止信号 发送一个字节 读取一个字节 发送应答位 接收应答位 MPU6050初始化 指定地址写 指定地址读 读取数据寄存器 问题记录 前言 I2C …...
Xilinx FPGA | 管脚约束 / 时序约束 / 问题解析
注:本文为 “Xilinx FPGA | 管脚约束 / 时序约束 / 问题解析” 相关文章合辑。 略作重排,未整理去重。 如有内容异常,请看原文。 Xilinx FPGA 管脚 XDC 约束之:物理约束 FPGA技术实战 于 2020-02-04 17:14:53 发布 说明&#x…...
应用层自定义协议序列与反序列化
目录 一、网络版计算器 二、网络版本计算器实现 2.1源代码 2.2测试结果 一、网络版计算器 应用层定义的协议: 应用层进行网络通信能否使用如下的协议进行通信呢? 在操作系统内核中是以这种协议进行通信的,但是在应用层禁止以这种协议进行…...