news 2026/7/27 7:58:53

Java图像处理2.0

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java图像处理2.0

在之前监听器内,我们已经把图片像素处理代码有了一个系统的学习,下面我们再创建两个类,来完整实现图像处理功能。

一:界面类

我们在之前学习的界面类上,新增上画板板块与按钮板块,来使界面布局更加清晰:

画板板块:

ImagePanel imgPnl = new IamgePanel(); imgPnl.setBackground(Color.DARK_GRAY);

按钮板块:

JPanel btnJp = new JPanel(); btnJp.setBackground(Color.BLACK); btn.setPreferredSize(new Dimension(0,100));

这里有三个尺寸方法:
1.setPreferredSize()首选尺寸
布局管理器优先参考的理想大小,最常用,适配自动布局。(宽度 0 代表不限制宽度,自动拉伸填满窗口底部整行)
2.setMinimumSize()最小尺寸
组件不能比这个更小,窗口缩小时不会低于该宽高。
3.setMaximumSize()最大尺寸
组件不能超过这个大小。

接着,添加按钮组件到按钮板块并绑定监听器:

String[] str ={"原图","灰度化","二值化","马赛克","蓝调","黄昏","反片"}; for (int i =0;i<str.length;i++){ JButton jb = new JButton(str[i]); btnJp.add(jb); jb.addActionListener(imgL); }

然后,画板,按钮添加到界面上并可视化:

jf.add(imgPnl,BorderLayout.CENTER); jf.add(btnJp,BorderLayout.SOUTH); jf.setVisible(true);

从画板板块获取画笔并传给监听器:

Graphics g = imgPnl.getGraphics(); imgL.g=g;

最后写主函数:

public static void main() { ImageUI ui = new ImageUI(); ui.showUI();

二:ImagePanel类

因为java内不存在ImagePanel类,但是存在JPanel类,所以我们要继承JPanel类,并重写方法。

我们先来认识一下JPanel类;

简单理解,它就是一块空白、可承载内容的「透明面板 / 画布」

有两大作用:

1.作为布局容器,装按钮、组件(如 btnJp)

2.作为自定义绘图画布(如 ImagePanel)

我们来看具体继承重写操作:

public class ImagePanel extends JPanel { @Override public void paint(Graphics g) { super.paint(g);

来认识一下super:

super 属于 Java 50 个保留关键字之一,编译器有特殊识别逻辑,不能用作变量名、类名、方法名。
它专门用来指代当前对象的直接父类,只能在子类中使用。

super.成员 访问父类的属性 / 方法

super.paint(g);

super. 调用父类 JPanel 的 paint() 方法;
区分:如果子类和父类有同名方法,不加 super 默认调用自己的,加 super 才会走父类。

这里的super.paint(g)主要执行父类 JPanel 自带的绘制逻辑,不写会出现画面残留、拖影、背景错乱。

父类 JPanel 的 paint 内部做了两件事:


1.清空画布(填充背景色)
用面板自身的背景色把整个绘图区域刷一遍,擦掉上一次绘制的所有内容(旧图片、文字、色块)。
2.绘制组件基础样式
边框、透明属性、基础布局底色等底层渲染。

接着,重写paint方法:

g.fillRect(w/4,h/4,w/2,h/2); g.setFont(new Font("黑体",Font.BOLD,35)); g.setColor(Color.lightGray); g.drawString("图像正在加载中",w/3,h/2);

这里宽高没有设具体的值,是一种动态的宽高,拉伸界面时,图形、文字跟着窗口自适应、永远居中,更加美观。

这样加上之前的监听器类,一个完整的图像处理项目就基本完成了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 7:54:51

TMS320VC5509A DSP内存架构与外部接口配置实战指南

1. 项目概述与核心价值在嵌入式DSP系统开发中&#xff0c;内存架构和外部接口的配置&#xff0c;往往是决定项目成败的关键&#xff0c;却又最容易被新手开发者忽视。我见过太多项目&#xff0c;算法写得漂亮&#xff0c;但一跑起来就卡顿、丢数据&#xff0c;最后追根溯源&…

作者头像 李华
网站建设 2026/7/27 7:53:29

SpringBoot注解全解析:从基础到高级实战

1. SpringBoot注解全解析&#xff1a;从入门到精通SpringBoot作为Java领域最流行的框架之一&#xff0c;其注解系统是开发者每天都要打交道的核心内容。但很多开发者对注解的使用停留在"知道怎么用"的层面&#xff0c;遇到复杂场景往往束手无策。本文将带你系统梳理S…

作者头像 李华
网站建设 2026/7/27 7:51:25

Unity中RVO2库集成实战:实现自然流畅的群体避障AI

1. 项目概述&#xff1a;当RVO2遇见Unity&#xff0c;一场关于“优雅避让”的实践如果你在Unity里捣鼓过AI角色&#xff0c;尤其是那种需要一群角色在场景里自由穿梭、互不碰撞的场景&#xff0c;那你大概率经历过“鬼畜穿模”或者“卡墙角”的抓狂时刻。传统的寻路方案&#x…

作者头像 李华
网站建设 2026/7/27 7:50:52

嵌入式开发时序参数详解:从理论到实践,以TMS320C5505为例

1. 项目概述&#xff1a;为什么时序参数是嵌入式开发的“交通规则”在嵌入式系统开发&#xff0c;尤其是基于DSP&#xff08;数字信号处理器&#xff09;的设计中&#xff0c;我们常常把精力集中在算法实现、内存优化和功耗管理上。然而&#xff0c;一个项目能否稳定运行&#…

作者头像 李华
网站建设 2026/7/27 7:49:56

使用Playwright自动化测试PWA离线能力与缓存策略

1. 项目概述&#xff1a;为什么我们需要验证PWA的离线能力&#xff1f;在当前的Web开发领域&#xff0c;渐进式Web应用&#xff08;PWA&#xff09;已经从一个前沿概念变成了提升用户体验、增强用户粘性的标配技术。它的核心承诺之一&#xff0c;就是提供接近原生应用的体验&am…

作者头像 李华
网站建设 2026/7/27 7:47:04

【华为OD机试真题 新系统】1057、物流仓储多维度成本利润综合查询系统 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

文章目录 一、题目 🎃题目描述 🎃输入输出 🎃样例1 🎃样例2 二、代码与思路参考 🎈C++语言思路 🎉C++代码 🎈Java语言思路 🎉Java代码 🎈Python语言思路 🎉Python代码 🎈C语言思路 🎉 C语言代码 🎈JS语言思路 🎉JS代码 作者:KJ.JK 订阅本专栏后即…

作者头像 李华