Java自制绘图软件

news2025/2/13 12:46:09

在这里插入图片描述

引言

  • 在大连时接触了Java,Java非常优雅,我非常喜欢。期末老师要做一个项目作品,看着windows自带的画图软件,我决定自己动手做一个绘图软件。
  • 经过无数次界面调试,刷新层叠关系令我爆肝了一个月,最终完成了这个2400行代码的绘图软件。Java语言是很优雅和工整的,本项目分层脉络也很清晰,因此不对此项目过多阐述。
  • 绘图软件名为爱绘,本文介绍中将展示爱绘的功能,工程项目中附带我GtiHub爱绘项目地址,欢迎大家交流。

一、介绍

  • 我将从开始界面、绘图界面、设置界面展现爱绘的功能。

1.1 开始界面

  • 开始界面包含软件名爱绘、界面跳转按钮(绘图、文档、设置、关于)、菜单栏(文件、选项、编辑、帮助)。
  • 菜单栏将一直存在于各个界面,绘图界面主要用于用户的创作工作,文档界面包含爱绘的使用说明,设置界面包含爱绘主题、调色板、绘图撤销的设定,关于界面是爱绘的开发信息。
    在这里插入图片描述

1.2 绘图界面

  • 绘图界面如下所示,当进入绘图界面时用户的鼠标光标将会被替换为画笔,按住鼠标即可在画布上进行绘画。
    在这里插入图片描述

插入图片与绘图保存

  • 绘图界面如下图所示,右侧是我画的蒙娜丽莎,看起来生动形象、惟妙惟肖,这与爱绘的强大绘画能力密不可分。
    在这里插入图片描述

  • 在绘图界面右键点击插入图片,插入蒙娜丽莎原画进行对比:
    在这里插入图片描述

  • 看起来差不多,点击文件-保存,即可将美丽的画作保存为本地图片。
    在这里插入图片描述

图层替换和可见性

  • 如果你还想进行创作可以添加图层,图层1是默认图层固定可见,其他图层可以设置可见性。点击图层2和图层1的替换按钮将两个图层替换,使得我们的美丽画作移动到图层2上,再设置图层2不可见。
    在这里插入图片描述

  • 替换图层并设置图层的可见性后效果如下:
    在这里插入图片描述

绘图功能

  • 右键点击颜色选择器,可以在颜色选择器中选择画笔的颜色
    在这里插入图片描述
  • 爱绘支持撤销和重做功能,我们可以按ALE+E撤销刚才插入的图片。当绘图时,我们可以在设置界面设置单次撤销数目,以支持一次撤销多次操作。
    在这里插入图片描述

1.3 设置界面

软件主题

  • 点击主界面设置或菜单栏-选项-设置,跳转到设置界面(您的画作不会因此消失),设置界面如下所设:
    在这里插入图片描述
  • 点击皮肤选择爱绘的主题颜色为蓝色,换肤后效果如下:
    在这里插入图片描述

调色板

  • 点击设置界面-调色板可切换调色板为三原色调色板
    在这里插入图片描述
  • 将鼠标放置于三原色其中之一的区域,通过滚轮即可调整对应原色值,三原色交汇处显示的是最终合成的颜色。
    在这里插入图片描述

最佳布局

  • 点击设置界面-最佳布局,会弹出调整最佳布局的窗口:
    在这里插入图片描述
  • 拉伸并移动最佳布局窗口为最佳后关闭最佳布局窗口即可:
    在这里插入图片描述
  • 点击选项-设为最佳布局,即可将窗口移动到最佳布局位置并且大小为最佳布局大小。
    在这里插入图片描述

1.4 更多功能

  • 爱绘还有许多功能尚未展示,包括鼠标显示为绘笔、橡皮擦功能、图形插值功能、PS图片、帮助文档等。
  • 如果您想探索更多,请直接访问GitHub上的工程地址。

二、工程项目

2.1 项目层次

  • 爱绘的整体项目图如下所示:
    在这里插入图片描述
  • gui中包含了UI界面类,instrument中包含了许多功能类比如将屏幕上的内容输出到图片中的功能,resource中包含了许多项目资源图片比如画笔和橡皮擦的图片,software中包含了main函数。本项目实际未使用到mysql数据库。
  • gui中包含如下内:
    在这里插入图片描述
  • 其中dilogP代表调色板、选择图片文件等弹窗,drawTool代表绘制需要的工具如画笔或橡皮,elementp代表绘图的基本图片和可以插入的图形形状,panelp代表各个界面面板,windowp中包含了主界面类。
  • 阅读源码建议从windowp开始看起,主面板上组装了各种各样的面板组件。可以通过修改dilogP来修改弹窗面板组件,可以修改drawTool来支持更多的绘画操作工具,可以通过修改elementp来支持更多的图形操作,可以通过panelp来调整各个面板的内容。

2.2 项目源代码

  • GitHub上的项目地址如下,可以直接访问GitHub网站下载工程代码。
  • 附上GitHub工程地址,拿走时请给博主点个关注哦!
  • 爱绘项目GitHub网站地址

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

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

相关文章

没有AI歌手一键包,纯纯的算法项目

项目地址: https://github.com/PlayVoice/so-vits-svc-5.0 来源丨元语音技术 本项目的目标群体是:深度学习初学者,具备Pyhon和PyTorch的基本操作是使用本项目的前置条件; 本项目旨在帮助深度学习初学者,摆脱枯燥的纯…

2023年6月最新|大屏可视化

大屏可视化 一、可视化适配 大屏下显示一般都是16:9尺寸 1920*1080 ,做适配也就是在这个比例的基础上进行的 方案一:打开VSCode终端,下载flexible npm i lib-flexible修改源码 要修改的源码的路径: 项目/mode_modules/lib-fl…

Springboot+Vue服务器盲盒活动

文章目录 一、项目要求二、说明文档1、用户抽奖主页/raffle2、多种奖品链接1、奖品1 discont /discount2、奖品2 CPU upgrade /cpu3、奖品3 Memory upgrade /memory4、奖品4 Increase duration /duration5、奖品5 Send to server /server6、奖品6 Configuration upgrade /upgra…

信必优成功案例-全球Tops汽车技术供应商

该集团是全球Tops汽车技术供应商,业务范围涵盖了汽油系统、柴油系统、汽车底盘控制系统、汽车电子驱动、起动机与发电机、电动工具、家用电器、传动与控制技术、热力技术和安防系统等。信必优于2021年开始为该客户服务,参与了客户多个项目,以…

Android进阶 四大组件的工作过程(二):Service的工作过程

Android进阶 四大组件的工作过程(二):Service的工作过程 导语 本片文章主要是来介绍Service组件的工作过程的,主要分成Service的启动和Service的绑定两个部分来讲。上一篇文章我们已经介绍了Activity的工作工程,而Ser…

Windows软件:如何安装ideaIU-2020.3.3并使用无限重置插件达到永久使用

​前言: ​在我们做SpringBoot Java项目时,一个好的开发工具可以让我们的效率达到事半功倍,早期的eclipse已经无法满足我们日常需求,当然idea集成开发工具在很早前就已经进入市场,如今取得了无法撼动的地位&#xff0c…

度学习pytorch实战六:ResNet50网络图像分类篇自建花数据集图像分类(5类)超详细代码

1.数据集简介、训练集与测试集划分 2.模型相关知识 3.model.py——定义ResNet50网络模型 4.train.py——加载数据集并训练,训练集计算损失值loss,测试集计算accuracy,保存训练好的网络参数 5.predict.py——利用训练好的网络参数后&#xff0…

为Nomad Web使用添加快捷应用图标

大家好,才是真的好。 上次我们说到Nomad Web已经更新到了1.0.8版本,作为未来的“Notes客户机”(运行在浏览器中),Nomad Web的更新迭代很快。从1.0.5版本开始,就可以直接部署在Domino服务器上,而…

STM32MP157_PRO开发板的第一个驱动程序

文章目录 目的:为什么编译驱动程序之前要先编译内核?编译内核编译设备树编译安装内核模块编译内核模块安装内核模块到 Ubuntu 的NFS目录下备用 安装内核和模块到开发板上编译 led 驱动在开发板安装驱动模块下载驱动程序安装驱动模块 目的: 在…

Netty实战(十三)

WebSocket协议(一) 一、什么是WebSocket 协议二、简单的 WebSocket 程序示例2.1 程序逻辑2.2 添加 WebSocket 支持2.3 处理 HTTP 请求2.4 处理 WebSocket 帧 一、什么是WebSocket 协议 WebSocket 协议是完全重新设计的协议,旨在为 Web 上的双…

读书笔记-《ON JAVA 中文版》-摘要16[第十六章 代码校验]

文章目录 第十六章 代码校验1. 测试1.1 单元测试1.2 JUnit1.3 测试覆盖率的幻觉 2. 前置条件2.1 断言(Assertions)2.2 Java 断言语法2.3 Guava 断言2.4 使用断言进行契约式设计2.4.1 检查指令2.4.2 前置条件2.4.3 后置条件2.4.4 不变性2.4.5 放松 DbC 检…

Frida技术—逆向开发的屠龙刀

简介 Frida是一种基于JavaScript的动态分析工具,可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码,从而进行动态分析、调试、修改等操作,能够绕过应用程序的安全措施&a…

路径规划算法:基于人工电场优化的路径规划算法- 附代码

路径规划算法:基于人工电场优化的路径规划算法- 附代码 文章目录 路径规划算法:基于人工电场优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

【Leetcode60天带刷】day06哈希表——242.有效的字母异位词,349. 两个数组的交集,202题. 快乐数,1. 两数之和

题目:242.有效的字母异位词 Leetcode原题链接:242. 有效的字母异位词 思考历程与知识点: 如果一个字母一个字母的找,也就是暴力,用两个for的话时间复杂度是O(N^2); 我们可以换个思路,a~z一共…

Telerik Report Server R2 2023

Telerik Report Server R2 2023 仪表报告项-使用仪表或类似表盘的显示提供数据的可视化表示。 报告项上的AccessibleRole属性-ARIA(可访问的富Internet应用程序)支持已显著改进。在Web上,当启用了辅助功能时,呈现的报表项包含预定义的辅助功能角色。这样…

(七)矢量数据的空间分析——叠置分析①

矢量数据的空间分析——叠置分析 叠置分析是将代表不同主题的各个数据层面进行叠置,产生一个新的数据层面,叠置结果综合了原来两个或多个层面要素所具有的属性。 叠置分析不仅生成了新的空间关系,而且还将输入的多个数据层的属性联系起来产…

随机的乐趣和游戏

1、猜数字游戏 #GuessingGame.py import random the_number random.randint(1, 10) print("计算机已经在1到10之间随机生成了一个数字,") guess int(input("请你猜猜是哪一个数字: ")) while guess ! the_number:if guess > the_number:p…

【MySQL】数据库基本知识小结

数据库的基本概念 数据库:DataBase 简称 DB,就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。数据库管理系统:DataBase Management System 简称 DBMS,是一种操纵和管理数据库的大型软件,通常用于建立…

数据结构 一绪论

第一章:绪论 1.1数据结构的基本概念 1.数据:数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别 和处理的符号的集合。 2.数据元素:数据元素是数据的基本单位,通常作为一个整体进行…

软件项目质量跟踪控制的3大方法

1、质量度量法 质量度量法包括尺度度量和二元度量两种方法,而尺度度量是定量度量,适用可直接度量的特性。如缺陷率 而二元度量是定性度量,适用间接度量的质量特性。如使用性,灵活性。 软件项目质量跟踪控制的3大方法:质…