Android开发经验记录_对多个Path形成的图形进行填充踩坑与怕坑记录

需求:

通过其他同事对二值化后的图像生成的图形轨迹,形成Path,并绘制到Canvas中。

初步实现测试:

1、paint先使用stroke对获取的扫描点连成一个个path看看效果先

            canvas.save();Paint paint = new Paint();paint.setStrokeWidth(3f);paint.setColor(mScannedPointsColor);paint.setStyle(Paint.Style.STROKE);for (int i = 0; i < mScannedPoints.size(); i++) {List<PointF> pointFList = mScannedPoints.get(i);Path path = new Path();for (int j = 0; j < pointFList.size(); j++) {PointF pointF = pointFList.get(j);if (j == 0) {path.moveTo(pointF.x, pointF.y);} else {path.lineTo(pointF.x, pointF.y);}}path.close();totalPath.addPath(path);canvas.drawPath(path, paint);}canvas.restore();

描边绘制效果正常:

翻车经历:

然后再试试把paint的style设置为fill,结果立即翻车:

对比二值化图形,细节丢失严重,很多不该被填充颜色的地方被填充了颜色。为啥呢?

于是我搜索了很多办法,大部分文章都是介绍如何使用path的setFillType方法更改填充方式,然而对我这个需求毫无作用。

解决方法:

最后我在想,会不会要把所有的子path添加到一个path里面再进行填充才可以正常呢?然后这次试试之后就成功了。

实际代码:

            canvas.save();Paint paint = new Paint();paint.setStrokeWidth(3f);paint.setColor(mScannedPointsColor);paint.setStyle(Paint.Style.FILL);Path totalPath = new Path();for (int i = 0; i < mScannedPoints.size(); i++) {List<PointF> pointFList = mScannedPoints.get(i);Path path = new Path();for (int j = 0; j < pointFList.size(); j++) {PointF pointF = pointFList.get(j);if (j == 0) {path.moveTo(pointF.x, pointF.y);} else {path.lineTo(pointF.x, pointF.y);}}path.close();path.setFillType(Path.FillType.EVEN_ODD);totalPath.addPath(path);}canvas.drawPath(totalPath, paint);canvas.restore();

显示结果:

能显示和二值化图像一致的、基于Path组成的矢量图像,因为不是栅格化图像,放大后也不会出现像素点,需求达成。

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

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

相关文章

git 实用命令杂记

使用解决冲突的方式合并&#xff0c;将避免简单的自动合并 git merge origin/dev --strategyresolve清理本地已经合并到 dev 的分支 git branch --merged | grep -v dev | xargs -n 1 git branch -d分支清理 Git 之删除本地无用分支_dearfulan 的博客 - CSDN 博客_git 删除本…

白日门引擎传奇手游架设教程-GM的成长之路

准备工具 服务器一台&#xff08;Windows系统&#xff09;白日门引擎服务端版本一个 前言&#xff1a; 此次教程使用的是版本是一个决战斗罗的一个版本、服务器使用的是驰网科技的游戏高频系列服务器。 教程开始 在我们拿到版本之后、我们需要先把版本解压到服务器D盘的根目录…

四六级高频词组7

目录 词组 其他文章链接&#xff1a; 词组 251. &#xff08;be&#xff09; equivalent to&#xff08;equal in value&#xff0c; amount&#xff0c; meaning&#xff09; 相等于&#xff0c; 相当于 252. in essence &#xff08;in itsones nature&#xff09; 本质上…

处理获取当前日期---------------年月日//时分秒

当前时间&#xff0c;先分组匹配&#xff0c;以数组下标索引匹配定义的汉字进行替换 处理日期方法 /* 日期格式化 */ const formatTime function formatTime(time, template) {if (typeof time ! "string") {time new Date().toLocaleString(zh-CN, { hour12: fal…

Java基础语法之继承

为什么要继承 会发现&#xff0c;狗和猫只有叫声不同&#xff0c;因为它们都是动物&#xff0c;会有相同的属性和行为&#xff0c;所以它们可以继承animla类 如何继承 用到extends关键字 这样就会简化好多 注意 1.Animal称为父类/超类/基类&#xff1b;dog&#xff0c;cat称…

249:vue+openlayers 经纬度坐标转化为地址信息,点击后在弹窗显示

第249个 点击查看专栏目录 本示例是演示如何在vue+openlayers项目中点击某点,转化经纬度坐标为地址信息,弹窗显示。 通过点击地图,获取到经纬度坐标,然后通过调取mapbox的地址转换API,将经纬度坐标转化为地址信息,通过overlay的方式,在弹窗中展示出来。 直接复制下面的…

sylar高性能服务器-配置(P12-p14)内容记录

文章目录 p12&#xff1a;复杂类型解析一、方法函数二、结果展示 p13&#xff1a;复杂类型解析完善一、方法函数二、结果展示 p14&#xff1a;自定义类型解析一、方法函数二、小结 p12&#xff1a;复杂类型解析 ​ 本节内容主要针对完了配置类中对于复杂类型的转换。之前只实现…

中伟视界:水位识别、智能化巡检、远程监控,提升智慧河道管理效率

随着现代科技的发展&#xff0c;人工智能&#xff08;AI&#xff09;算法在各行各业中的应用越来越广泛。特别是在水利行业中&#xff0c;智慧河道的运营管理已成为了一个重要的课题。本文将探讨如何利用AI算法优化智慧河道的运营效率&#xff0c;以及如何通过水位识别视频分析…

CentOS7 OpenSSL升级到OpenSSH9.5p1

原文链接&#xff1a; CentOS7 OpenSSL升级1.1.1w&#xff1b;OpenSSH 升级 9.5p1 保姆级教程 openssl从3.1.0升级到3.1.1遇到的问题 注意操作时需要联网请参考如下链接 内网服务器联网安装依赖参见我的另一篇文章 一、 前言 OpenSSH 的加密功能需要用到OpenSSL&#xff0c;所…

C语言指针基础题(二)

目录 例题一题目解析及答案 例题二题目解析及答案 例题三题目解析及答案 例题四题目解析及答案 例题五题目解析及答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f…

Unity | 渡鸦避难所-2 | 搭建场景并添加碰撞器

1 规范项目结构 上期中在导入一系列的商店资源包后&#xff0c;Assets 目录已经变的混乱不堪 开发过程中&#xff0c;随着资源不断更新&#xff0c;遵循一定的项目结构和设计规范是非常必要的。这可以增加项目的可读性、维护性、扩展性以及提高团队协作效率 这里先做下简单的…

智能优化算法应用:基于斑点鬣狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于斑点鬣狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于斑点鬣狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.斑点鬣狗算法4.实验参数设定5.算法结果6.…

攻防世界-web-upload

1. 题目描述 打开链接&#xff0c;是这样的一个注册界面 先试着注册一个账号看看&#xff0c;这里简单操作&#xff0c;注册test/test&#xff0c;注册完后进行登录 登录成功后进入到这样一个文件上传界面。当前从界面上得到的信息暂时就是这些了。 2. 思路分析 既然存在上传…

【ret2hbp】一道板子测试题 和 SCTF2023 - sycrpg

前言 ret2hbp 主要是利用在内核版本 v6.2.0 之前&#xff0c;cpu_entry_area mapping 区域没有参与随机化的利用。其主要针对的场景如下&#xff1a; 1&#xff09;存在任意地址读&#xff0c;泄漏内核地址 2&#xff09;存在无数次任意地址写&#xff0c;泄漏内核地址并提权…

HCIA-WLAN V3.0,那些重点要点

一、WLAN各个标准&#xff0c;工作频段&#xff0c;理论速率。 二、OFDM和OFDMA&#xff0c;工作频段&#xff0c;空间流。 三、三种帧类型&#xff1a;管理帧、控制帧、数据帧&#xff0c;CAPWAP报文和端口。 四、帧间间隔&#xff0c;波束成形&#xff0c;信道绑定&#xff0…

接口测试要测试什么?怎么测?

本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系 第二部分&#xff1a;主要介绍为什么要做接口测试&#xff0c;并简单总结接口持续集成和接口质量评估…

正确看待鸿蒙不兼容Android,这不是趋势?

华为可能明年推出不兼容安卓的鸿蒙版本。11月20日&#xff0c;据澎湃新闻报道&#xff0c;一华为相关人士表示&#xff0c;推出时间还不确定&#xff0c;未来IOS、鸿蒙、安卓将为三个各自独立的系统。 稍早前据证券时报报道&#xff0c;有业内人士亦表示&#xff1a;“华为内部…

Re59:读论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 模型开源地址&#xff1a;https://huggingface.co/facebook/rag-token-nq ArXiv下载地址&#xff1a;https://arxi…

Linux——MySQL数据库的使用

访问MySQL数据库 MySOL数据库系统也是一个典型的C/S&#xff08;客户端/服务器&#xff09;架构的应用&#xff0c;要访问MySOL数据库 需要使用专门的客户端软件&#xff0c;在Linux系统中&#xff0c;最简单、易用的MySQL.客户端软件是其自带的mysql 命令工具。 登录到MySQL服…

关于Cython生成的so动态链接库逆向

来个引子&#xff1a;TPCTF的maze题目 如何生成这个so文件 为了研究逆向&#xff0c;我们先搞个例子感受一下生成so的整个过程&#xff0c;方便后续分析 创建对应python库文件 testso.py def test_add(a,b):a int(a)b int(b)return a bdef test_calc(li):for i in range…