阿里巴巴国际站特点/网络服务包括
1、引言
你是否还在因为不懂UI设计而不得不去借用别人的图片,甚至使用各种网图作为界面布局的一部分,那么今天就教你使用Bitmap对象去绘制自定义图形,并保存为png格式的图片,须知图片编辑软件本就是程序员开发出来的,我们又何必舍近求远呢,用代码生成岂不是更爽?
2、实现步骤
2.1、Bitmap对象创建
使用下面的方法创建Bitmp对象,第一个参数代表创建的位图宽度,第二个是位图高度,宽度和高度的单位都是像素,第三个是设置为支持透明背景,这里要注意高度和宽度必须大于0,后面索引也是从零开始。
Bitmap customBitmap = Bitmap//通过控制每一个像素点生成bitmap对象,可以用这种方式生成图片.createBitmap(501, 501, Bitmap.Config.ARGB_8888);//按像素设置
2.2、形状绘制
这里我以绘制透明背景圆形图片为例,并提供两种方法,第一种方法不适合绘制圆形,但可以用来绘制多边形。由于是绘制圆形,需要使用函数计算位置,我这里提供了用于计算圆的坐标的函数。
2.1.1、圆的标准方程函数
这个函数借助圆的标准方程计算圆的坐标。
/*** 已知圆的半径,圆心坐标,x坐标,求圆的y坐标* @param r 圆的半径* @param rx 圆心x坐标* @param ry 圆心y坐标* @param x 圆的某个位置的x坐标或y坐标,默认是根据x坐标求y坐标,如果需要根据y坐标求x坐标,* 那么互换rx和ry位置,传入y坐标,返回的结果就是x坐标*/public static double[] circle(double r,double rx,double ry,double x){double[] result;//因为是标准方程且一定有解,所以传入的第一个参数始终为1double b=-2*ry;double c=ry*ry+x*x-2*rx*x+rx*rx-r*r;result=quadratic_equation_one(1,b,c);return result;}
2.1.2、一元二次方程函数
圆的计算过程中要用到一元二次方程,所以这里提供计算一元二次方程的方法。
/*** 一元二次方程求解* @param a 二次项系数* @param b 一次项系数* @param c 常数* @return 计算结果返回数组*/public static double[] quadratic_equation_one(double a,double b,double c){double[] result=null;//3、小于0:有两个复根,一般不考虑这种情况但为了完整都写好//三种情况double data=b*b-4*a*c;if (data>0){//1、大于0:有两个实根result=new double[2];result[0]=(-b+Math.sqrt(data))/(2*a);result[1]=(-b-Math.sqrt(data))/(2*a);}else if (data==0){//2、等于0:有一个实根result=new double[1];result[0]=(-b)/(2*a);}return result;}
3、绘制方法
3.1、方法一:直接绘制
//方法一:直接绘制圆,部分区域会被错过int i,j;for (i = 0; i < 500; i++) {//判断在圆的范围内才绘制for (j = 0; j < 250; j++) {result=UiMath.circle(250-j,250,250,i-j);if (result!=null){if (result.length==1){//传入的x和y值必须大于0customBitmap.setPixel(i-j, (int) result[0],Color.parseColor("#ff0000"));customBitmap.setPixel((int) result[0],i-j,Color.parseColor("#ff0000"));}else if (result.length==2){customBitmap.setPixel(i-j, (int) result[0],Color.parseColor("#ff0000"));customBitmap.setPixel(i-j, (int) result[1],Color.parseColor("#ff0000"));customBitmap.setPixel((int) result[0],i-j,Color.parseColor("#ff0000"));customBitmap.setPixel((int) result[1],i-j,Color.parseColor("#ff0000"));}}}}
3.2、方法二:反向绘制
先把需要绘制的区域全部填充颜色,然后的圆形以外的区域设置为透明色。
//方法二:反向绘制
//1、先绘制背景色
for (i = 0; i < 500; i++) {//判断在圆的范围内才绘制for (j = 0; j < 500; j++) {customBitmap.setPixel(i,j,Color.parseColor("#ff0000"));}
}
//2、去除多余区域
for (i = 0; i < 500; i++) {result=UiMath.circle(250,250,250,i);if (result!=null){if (result.length==1){//传入的x和y值必须大于0for (j = 0; j < 500; j++) {if (j<result[0] || j>result[0]){customBitmap.setPixel(i, j,Color.parseColor("#00000000"));}}}else if (result.length==2){for (j = 0; j < 500; j++) {if (j<result[1] || j>result[0]){customBitmap.setPixel(i, j,Color.parseColor("#00000000"));}}}}
}
4、保存图片
调用下面这个方法保存图片,如果保存为jpg格式是没有透明效果的。
/*** 保存bitmap为图片*/private void saveBitmap(Bitmap bitmap) {new Thread(){@Overridepublic void run() {File file=new File(getExternalFilesDir(null),"now.png");try {FileOutputStream fos=new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG,90,fos);fos.flush();fos.close();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(CreateBitmapActivity.this,"保存完成",Toast.LENGTH_SHORT).show();}});} catch (Exception e) {throw new RuntimeException(e);}}}.start();}
5、效果演示
5.1、方法一效果演示
5.2、方法二效果演示
相关文章:

android中使用Bitmp对象绘制图形
1、引言 你是否还在因为不懂UI设计而不得不去借用别人的图片,甚至使用各种网图作为界面布局的一部分,那么今天就教你使用Bitmap对象去绘制自定义图形,并保存为png格式的图片,须知图片编辑软件本就是程序员开发出来的,我…...

Linux操作系统基础(八):Linux的vi/vim编辑器
文章目录 Linux的vi/vim编辑器 一、vi/vim编辑器介绍 二、打开文件 三、VIM编辑器的三种模式(重点) 四、命令模式相关命令 五、底行模式相关命令 Linux的vi/vim编辑器 一、vi/vim编辑器介绍 vi是visual interface的简称, 是Linux中最经典的文本编辑器 vi的核心设计思想…...

nginx限制网段访问
文章目录 nginx限制网段访问介绍:使用:示例:介绍网段:nginx限制网段访问 介绍: Nginx的deny和allow指令是由ngx_http_access_module模块提供, Nginx安装默认内置了该模块 使用: nginx访问控制模块: 想禁止哪个ip访问就加上deny IP, 想允许哪个ip访问就加上allow…...

Linux开机自动执行自定义脚本或命令
尝试了多种方法,现总结如下: 在用户登录之前自动执行 1. /etc/init.d/rcS 2. /etc/inittab 在用户登录之后自动执行:下述方法,实际尝试发现,之后再输入用户名和密码后才会自动执行。当如果不需要输入用户名或密码时…...

【Linux】 网络编程套接字
目录 预备知识 网络字节序 网络字节序和主机字节序转换的库函数 socket编程接口 socket常见API sockaddr结构 套接字的种类 预备知识 1.在IP数据包头部中,有两个IP地址,分别叫做源IP地址和目的IP地址。 2.端口号:是传输层协议的内容…...

MATLAB矩阵的操作(第二部分)
师从清风 矩阵的创建方法 在MATLAB中,矩阵的创建方法主要有三种,分别是:直接输入法、函数创建法和导入本地文件中的数据。 直接输入法 输入矩阵时要以中括号“[ ]”作为标识符号,矩阵的所有元素必须都在中括号内。 矩阵的同行元…...

基础面试题整理6之Redis
1.Redis的应用场景 Redis支持类型:String、hash、set、zset、list String类型 hash类型 set类型 zset类型 list类型 一般用作缓存,例如 如何同时操作同一功能 2.redis是单线程 Redis服务端(数据操作)是单线程,所以Redis是并发安全的,因…...

MySQL基础查询篇(7)-常用的字符串函数
MySQL数据库是目前广泛应用于各种系统中的一种关系型数据库管理系统。在MySQL中,有许多常见的字符串函数,可以对字符串进行各种处理和操作。本文将介绍MySQL数据库中常用的一些字符串函数,并提供详细示例。 CONCAT函数:用于将两个…...

如何实现视线(目光)的检测与实时跟踪
如何实现视线(目光)的检测与实时跟踪 核心步骤展示说明 找到人脸 检测人脸特征点 根据特征点找到人眼区域 高精度梯度算法检测瞳孔中心 根据眼睛周边特征点计算眼睛中心 瞳孔中心和眼睛中心基于视线模型计算视线方向 视线方向可视化 详细实现与说明: https://stud…...

STM32 FSMC (Flexible static memory controller) 灵活静态内存控制器介绍
文章目录 1. 介绍FSMC2. FSMC特点3. Block示意图4. AHB接口4.1 Supported memories and transactionsGeneral transaction rulesConfiguration registers 5. 外部设备地址映射5.1 NOR/PSRAM地址映射将NOR Flash/PSRAM的支持进行封装 5.2 NAND/PC Card地址映射 1. 介绍FSMC 说到…...

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书信息维护模块UI设计实现
锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…...

SpringBoot源码解读与原理分析(六)WebMvc场景的自动装配
文章目录 2.6 WebMvc场景下的自动装配原理2.6.1 WebMvcAutoConfiguration2.6.2 Servlet容器的装配2.6.2.1 EmbeddedTomcat、EmbeddedJetty、EmbeddedUndertow2.6.2.2 BeanPostProcessorsRegistrar(后置处理器的注册器)2.6.2.3 两个定制器的注册 2.6.3 DispatcherServlet的装配2…...

git恢复rebase过程中遇到权限问题和丢失的提交
文章目录 一、检查丢失的提交是否还在 reflog 中二、创建一个新分支来恢复丢失的提交三、处理权限问题四. 使用 git fsck 查找丢失对象1、创建一个新分支来恢复该提交2、检查和合并提交 五. 介绍git中命令reflog 与 fsck1、git reflog2、git fsck使用场景 一、检查丢失的提交是…...

Spring boot 集成redis
一、使用spring bootspring-boot-starter-data-redis 导入maven包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> spring boot配置文件 spring.re…...

c++ STL系列——(一)概述
引言 在软件开发的世界里,C一直是一门备受青睐的编程语言,特别是在需要高性能和灵活性的场合。而C的标准模板库(Standard Template Library,简称STL)无疑是这门语言中最强大的工具之一。STL提供了一系列的数据结构和算…...

AI-数学-高中-25-三角函数一图像解决三角函数不等式
原作者视频:【三角函数】【考点精华】1图像解决三角函数不等式问题(基础)_哔哩哔哩_bilibili 1.三角函数图像法; 2.不好画图像时:任意角的三角函数图像,在象限中比较,在4个象限中寻找角度的关系。 示例1…...

在Ubuntu上安装JetBrains Toolbox并解决libfuse.so.2依赖问题
在安装JetBrains Toolbox的过程中,我们遇到了libfuse.so.2依赖缺失的问题。这个问题通常发生在尝试运行AppImage格式的程序时,如果系统缺少必要的FUSE(Filesystem in Userspace)支持。以下是我在解决这个问题并在Ubuntu上成功安装…...

在vscode上传项目到gitee
一、在Gitee上新建一个仓库 Tip:若已经创建过了,直接跳到第二部分看VsCode如何上传代码到Gitee 创建仓库比较简单,下面两张图就是整个过程,这里不在赘述,具体如下: 二、VsCode连接Gitee上创建的仓…...

比较两次从接口获取的数据,并找出变动的字段
问题:有这么一个接口数据,每次会返回这么一个数据: [{Id:1,pending:65,queued:0,completed:0},{Id:2,pending:0,queued:0,completed:0}],请问再次请求这个接口的时候如何将获取的数据和上一次获取到的数据进行比较,找出变动的字段…...

Java并发基础:LinkedBlockingDeque全面解析!
内容概要 LinkedBlockingDeque提供了线程安全的双端队列实现,它支持在队列两端高效地进行插入和移除操作,同时具备阻塞功能,能够很好地协调生产者与消费者之间的速度差异,其内部基于链表结构,使得并发性能优异&#x…...

Zabbix6.x配置中文界面 解决乱码问题
Zabbix6.x配置中文界面 解决乱码问题 Zabbix6.x界面无法选择中文,通过安装语言包解决。后面也解决了zabbix6中文方块(乱码)问题。 配置中文语言包 系统中默认没有携带中文语言包,可以通过以下命令查看 localectl list-locales #…...

next项目页面性能调优
next项目页面性能调优 一般来说性能优化可以分为加载时、运行时两部分的优化。 扩展参考链接: 前端性能优化 24 条建议 Webpack 4进阶–从前的日色变得慢 ,一下午只够打一次包 Webpack 分包优化首屏加载 参考指标 FCP(First Contentful P…...

性能评测|虚拟化和裸金属 K8s 哪个性能更好?
本文重点 整体而言,SKS(虚拟机 Kubernetes)可以达到裸金属 Kubernetes 性能的 82% – 96%,满足绝大部分场景下生产容器应用的性能需求。更多虚拟化与裸金属 Kubernetes 架构、特性、适用场景与性能对比,欢迎阅读文末电…...

【大厂AI课学习笔记】【1.6 人工智能基础知识】(1)人工智能、机器学习、深度学习之间的关系
6.1 人工智能、机器学习与深度学习的关系 必须要掌握的内容: 如上图:人工智能>机器学习>深度学习。 机器学习是人工智能的一个分支,该领域的主要研究对象是人工智能,特别是如何在经验学习中改进具体算法的性能。 深度学习…...

计算机毕业设计基于的农村蔬菜销售系统SSM
项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: vue mybatis Maven mysql5.7或8.0等等组成,B…...

【Chrono Engine学习总结】3-地型terrain
由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 1、关于物体材质 在介绍地型之前,要初步了解chrono中关于材质的一些基本概念。 首先,最基本的材质类是ChMaterialSurface,其进一步包括&…...

【Linux】构建模块
🔥博客主页:PannLZ 🎋系列专栏:《Linux系统之路》 🥊不要让自己再留有遗憾,加油吧! 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…...

vscode远程连接失败
目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境,以前一直很好用。 直到最近重装了系统之后,发现vscode没法对云服务器进行连接了,即使在远程主机添加了本地的公钥也不行。直接报错:…...

C#系列-C#访问FTP服务器实现上传下载(8)
FTP Server是什么? FTP Server(File Transfer Protocol Server),即文件传输协议服务器,是在互联网上提供文件存储和访问服务的计算机。它依照FTP协议提供服务,专门用来传输文件。 FTP Server允许不同的客…...

django中实现登录
Django中实现登录功能,通常涉及以下几个步骤: 一:实现步骤 1:创建用户模型:Django自带了一个用户认证系统,通常使用内置的User模型来管理用户。你也可以根据需要自定义用户模型。 2:创建登录表…...