java swing 图像翻转

基于Java的图形图像处理系统设计与实现:从Swing到像素算法 图像处理是Java开发中一个经典的综合应用场景,它将GUI编程、文件I/O与算法设计融为一体。其核心原理在于将图片视为二维像素矩阵,通过灰度化、二值化、卷积滤波等操作实现视觉效果变换。在工程实践中,合理的分层架构与性能优化至关重要,例如使用Swing构建界面、以BufferedImage承载像素数据、并借助SwingWorker避免界面卡顿。这类系统不仅适用于高校课程设计与毕业设计,也能作为求职简历中的项目亮点。本文从项目需求拆解出发,深入讲解技术选型、核心算法的实现细节以及常见内存与格式兼容问题,帮助开发 阅读详情

drawImage

public abstract boolean drawImage(Image img,
                                  int dx1,
                                  int dy1,
                                  int dx2,
                                  int dy2,
                                  int sx1,
                                  int sy1,
                                  int sx2,
                                  int sy2,
                                  ImageObserver observer)

这个重载版本的drawImage方法确实可以用来实现图像的翻转效果。它允许你从原始图像中选择一个区域,并将其绘制到目标位置,同时还能进行缩放、旋转或翻转

参数详解

这个方法的参数看起来很多,但其实可以分为两组:

目标区域参数:

  • int dx1, int dy1:目标图像的左上角坐标
  • int dx2, int dy2:目标图像的右下角坐标

源图像区域参数:

  • int sx1, int sy1:源图像中要绘制区域的左上角坐标
  • int sx2, int sy2:源图像中要绘制区域的右下角坐标

其他参数:

  • ImageObserver observer:图像加载状态的观察者,可以传入null

图像翻转的原理

图像翻转主要通过交换源图像区域的坐标来实现:

  • 水平翻转:交换sx1和sx2
  • 垂直翻转:交换sy1和sy2
  • 对角线翻转:同时交换上述两组坐标
  • import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.File;
    import javax.imageio.ImageIO;
    
    public class ImageFlipDemo extends JPanel {
        private Image originalImage;    // 原始图像
        private Image flippedImage;     // 翻转后的图像
        private boolean horizontalFlip = false;  // 是否水平翻转
        private boolean verticalFlip = false;    // 是否垂直翻转
        
        public ImageFlipDemo() {
            try {
                // 加载图片(请确保路径正确)
                originalImage = ImageIO.read(new File("example.jpg"));
                // 如果没有图片,可以使用默认的图标
                if (originalImage == null) {
                    originalImage = new ImageIcon(getClass().getResource("/default.png")).getImage();
                }
            } catch (Exception e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(this, "无法加载图片");
            }
            
            // 创建按钮来控制翻转
            JButton hFlipButton = new JButton("水平翻转");
            hFlipButton.addActionListener(e -> {
                horizontalFlip = !horizontalFlip;
                repaint();  // 重绘面板
            });
            
            JButton vFlipButton = new JButton("垂直翻转");
            vFlipButton.addActionListener(e -> {
                verticalFlip = !verticalFlip;
                repaint();  // 重绘面板
            });
            
            // 添加按钮到面板
            JPanel buttonPanel = new JPanel();
            buttonPanel.add(hFlipButton);
            buttonPanel.add(vFlipButton);
            
            // 设置主面板布局
            setLayout(new BorderLayout());
            add(buttonPanel, BorderLayout.NORTH);
        }
        
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            
            if (originalImage != null) {
                int width = originalImage.getWidth(this);
                int height = originalImage.getHeight(this);
                
                // 计算源图像区域的坐标
                int sx1 = 0;
                int sy1 = 0;
                int sx2 = width;
                int sy2 = height;
                
                // 如果水平翻转,交换sx1和sx2
                if (horizontalFlip) {
                    int temp = sx1;
                    sx1 = sx2;
                    sx2 = temp;
                }
                
                // 如果垂直翻转,交换sy1和sy2
                if (verticalFlip) {
                    int temp = sy1;
                    sy1 = sy2;
                    sy2 = temp;
                }
                
                // 计算目标图像的坐标(居中显示)
                int dx1 = (getWidth() - width) / 2;
                int dy1 = (getHeight() - height) / 2;
                int dx2 = dx1 + width;
                int dy2 = dy1 + height;
                
                // 绘制原始图像(在左侧)
                g.drawImage(originalImage, 50, 100, this);
                g.drawString("原始图像", 50, 90);
                
                // 绘制翻转后的图像(在右侧)
                g.drawImage(originalImage, 
                            dx1, dy1, dx2, dy2,  // 目标区域
                            sx1, sy1, sx2, sy2,  // 源图像区域
                            this);
                    
                g.drawString("翻转后的图像", dx1, dy1 - 10);
            } else {
                g.drawString("图片未加载", 50, 50);
            }
        }
        
        public static void main(String[] args) {
            JFrame frame = new JFrame("图像翻转演示");
            ImageFlipDemo demo = new ImageFlipDemo();
            frame.add(demo);
            frame.setSize(800, 600);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    }

用51单片机和LD3320语音模块DIY一个会说话的温度报警器(附完整代码) 本文详细介绍了如何使用51单片机和LD3320语音模块DIY一个智能温度报警器,包括硬件选型、电路设计、软件开发及核心功能实现。通过DS18B20温度传感器和语音模块的结合,实现温度超标时的语音报警功能,适合智能家居系统等应用场景。附完整代码,方便开发者快速复现。 阅读详情

相关推荐

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1019

Java:实现翻转图像(附带源码)

Java:实现翻转图像(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1242

用Simulink复现Hopf振荡器:从数学公式到稳定极限环的保姆级仿真教程

本文详细介绍了如何在Simulink中实现Hopf振荡器,从数学原理到仿真建模的全过程。通过参数调试和波形分析,帮助读者掌握Hopf振荡器的核心特性及其在机器人控制等领域的应用。特别强调了自适应调节技巧,提升系统稳定性和鲁棒性。

weixin_29261711的博客 444

Java awt组建学习,图像翻转操作

import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.ActionEvent; import ...

WiFi_PRO的博客 391

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 654

STM32与威纶通触摸屏RS485通信实战:Modbus RTU协议与避坑指南

在工业自动化与嵌入式系统开发中,串行通信是实现设备间数据交换的基础技术。RS485总线凭借其差分信号传输、抗干扰能力强、支持多点通信及长距离传输等特性,成为工业现场广泛应用的物理层标准。其核心原理是利用一对双绞线进行平衡传输,有效抑制共模噪声。在协议层,Modbus RTU作为开放、简洁的主从式应用层协议,定义了统一的数据模型(如线圈、寄存器)和功能码,极大简化了不同厂商设备间的互操作性。结合STM32微控制器的UART外设与威纶通(Weinview)人机界面(HMI),可以构建稳定可靠的监控与控制系统。本

weixin_33925615的博客 327

Swing之图片水平翻转 垂直翻转 180度旋转

Swing之图片水平翻转 垂直翻转 180度旋转

sdfsdfytre的博客 778

博图编写温度程序_s7 smart200的CRC-16校验程序

最近做一个小项目,项目中采用485自由口通讯方式,使用一台西门子S7 smart200对一台冷水机做多个状态和温度做监控,并能对冷水机进行启停控制,和参数设置,因为冷水机的协议不是标准modbus格式,所以要自己编写通信协议。其中要用到CRC校验,在网上找了些别人写的程序,基本上用不了。只能自力更生了。首先,找到CRC校验的算法,并理解。 下面就是我找的算法(这个网上很多),1....

weixin_39539761的博客 3062

java实现图片翻转

1. package Assis; 2. 3. import java.awt.geom.AffineTransform; 4. import java.awt.image.AffineTransformOp; 5. import java.awt.image.BufferedImage; 6. import java.io.IO...

baile8410的博客 702

微软商店报错“此产品当前不可用”?终极修复指南

微软商店报错“此产品当前不可用”?终极修复指南

安德洛夫 3807

《AgentScope-Java 深入浅出教程》第8章 工具高级特性

掌握工具组、预设参数、执行上下文等高级特性。

步子哥的博客 265

JAVA写的图片查看器

运行前在c:\放一张名称为aa.jpg的图片 import java.awt.*;import javax.swing.*;import java.awt.event.*;import javax.swing.event.*;...

256

在 SAP BAS 中扩展标准 SAP Fiori 应用并部署到 ABAP 环境的完整实践指南

SAPUI5 Adaptation Project 摘要(148字) SAPUI5 Adaptation Project 提供了一种高效扩展标准Fiori应用的方式,通过创建应用变体(Application Variant)实现差异化定制。开发者可在SAP BAS中使用可视化编辑器修改UI元素(如隐藏字段、调整表格布局、添加按钮等),而无需重写业务逻辑。变体部署到ABAP环境后,可与标准应用并行使用,且能随原应用升级保持同步。典型应用场景包括为不同用户角色定制简化界面或增强特定功能,既满足个性化需求,又保留

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 184

第十九章总结:Java绘图

/ 设置窗体关闭模式。

qq_73086324的博客 79

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Java GUI 最终完整版】图像处理工具开发笔记:几何变换 / 滚轮缩放 / 滑块参数调节 / 底片反色 / 3×3 卷积浮雕滤镜(附完整源码)

本文介绍了基于Java Swing开发的图像处理工具最终版,主要实现了以下功能: 基本功能:图片加载、灰度转换、马赛克绘制 几何变换:90°旋转、左右/上下翻转 交互功能:滚轮缩放、亮度调节滑块 新增滤镜:底片反色效果和3×3卷积浮雕效果

2502_93190068的博客 283

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java 图像处理工具:瞬间加载 + 马赛克 + 旋转 + 亮度调节

本次升级版图像处理工具,在原有基础上完成了性能与功能的双重升级,从一个基础像素演示工具,变为一款流畅、实用、交互完整的轻量级图片编辑器。通过本次开发,可以深入理解 Java GUI 绘图机制、缓冲图像原理、像素级处理、鼠标交互与坐标映射等核心知识点,代码结构清晰、注释完整,非常适合 GUI 学习与课程设计使用。以上就是本次 Java GUI 图像处理工具的全部内容,代码注释详细、可直接运行。项目还在持续完善中,后续我会继续更新更多功能与优化。

2502_93190068的博客 398

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java中设计图像处理工具(二)

在Java中设计图像处理工具(一)中,我们已经实现了六个功能:原图、马赛克、旋转、灰度、打开、缩放。接下来,我们需要实现另外几个功能。jf.setTitle("图像处理1.0");String[] name={"打开","原图","马赛克","旋转","灰度","镜面翻转","缩放","复古","保存"};i++){String path="D:\\图片\\【哲风壁纸】下雪-冬季雪景(2).png";

Timeless_wild的博客 44

Java:实现图片倒影效果(附带源码)

Java:实现图片倒影效果(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 2047

第19章 java绘图

【代码】第19章 java绘图。

2201_75845637的博客 164

100个Java经典例子(21-30)初学者的利器高手的宝典JavaSE

view plainprint? package test21;    import javax.swing.JDesktopPane;  import javax.swing.JMenu;  import javax.swing.JMenuItem;  import javax.swing.JMenuBar;  import javax.swing.JFrame;  import ja

liuhanhan512的专栏 2345

Swing之图片水平翻转、垂直翻转、180度旋转

import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.IOException; import ja

落日小屋 8310

java swing 图片旋转_Java如何在Swing中逐渐旋转图像?

当用户单击按钮时,我正在旋转图像。但这是行不通的。我想看到图像逐渐旋转90度直到停止,但没有旋转。单击该按钮时,图像必须逐渐旋转90度。我创建了一个SSCCE来演示该问题。请使用CrossingPanelSSCE您选择的任何图像替换班级中的图像。只需将图像放在images文件夹中并命名images/railCrossing.JPG。RotateButtonSSCEimport java.awt.e...

weixin_30069911的博客 646

自定义Button

为什么80%的码农都做不了架构师?>>> ...

weixin_33949359的博客 90

JFC/Swing活学活用之创建自定义图像组件

JFC/Swing活学活用之创建自定义图像组件 http://dev.21tx.com 2006年04月25日 天极网 魔戒 引言  本文将讲述如何应用JFC/Swing内建的图像组件来创建完全自定义的基于图像的用户接口。  大多数Swing应用程序是通过标准VM提供的,或者是客户提供的外观和感觉(L&F)来获取它们的外在展示。L&F是一个完整的体系架构,...

weixin_34111819的博客 193

java图形旋转动画_java实现图片水平和垂直翻转效果

最近在做小型游戏,遇到了要翻转图片的苦恼,经过我一下午的研究,终于发现了一种好用的方法。部分代码来源于别人,我在这个基础上修改了下,变得更好用了,之前的别人Image输入都是BufferedImage,我改成了Image,也就是加了一个转换。大家如果看不懂代码没关系,会用就行了,我会展示一下怎么用的。ImageRotate类package mypackage;import javax.imagei...

weixin_39936086的博客 407
上一篇: Java 图片的放大和缩小
下一篇: Java 让图片动起来
wu_android
博客等级 码龄10年 94粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值