java-图像的几何变换

/** Java 绘图相关技术的学习*Graphics类相关技术知识:
1.图像的几何变换图像翻转:使用另一个重载的drawImage(Image img,int x_1,int y_1,目标矩形的第一坐标int x_2,int y_2,目标矩形的第二坐标int x1,int y1,源矩形的第一坐标int x2,int y2,源矩形的第二坐标ImageObserver observer)利用非缩放的图像来呈现缩放的矩形,动态执行所需的缩放。图像旋转:利用Graphics2D类的rotate()结合Math.toRadians()方法来实现。图像错切:利用Graphics2D类的shear(double x,double y)结合Math.toRadians()方法来实现。*/
package app;import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.awt.event.*;//包含有main函数的类的类名和文件名必须保持一致
public class DigitalImage extends JFrame
{private static final long serialVersionUID = 1L;private final int width = 500;private final int height =500;private Image img;private int imgW = 500;private int imgH =500;private int x1=0, y1=0;private int x2 = imgW, y2 = imgH;private Canvas canvas = null;private JMenuBar menuBar = null;//图片旋转角度private int m_angle = 0;public DigitalImage(){super();init();}private void init(){this.setSize(width, height);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体面板为绘图面板对象canvas = new Canvas();this.setContentPane(canvas);this.setTitle("绘图");//获取图片URL url = DigitalImage.class.getResource("lena.jpg");img = Toolkit.getDefaultToolkit().getImage(url);//创建菜单栏对象menuBar = new JMenuBar();this.setJMenuBar(menuBar);//创建菜单JMenu menu = new JMenu("几何变换");menuBar.add(menu);//创建菜单项JMenuItem Item1 = new JMenuItem("图像旋转");Item1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Graphics2D g = (Graphics2D) getGraphics();m_angle = m_angle+15;g.rotate(Math.toRadians(m_angle));//此处画板对象和框架对象存在数据封装,在框架里需要操作画板需要传入指针g.drawImage(img, 0, 0, imgW, imgH, canvas); }});menu.add(Item1);//创建菜单JMenu Item2 = new JMenu("图像翻转");menu.add(Item2);//翻转方向菜单项JMenuItem childMenu1 = new JMenuItem("水平");childMenu1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//水平方向上,仅更改源矩形和目标矩形的x方向映射关系,即x的值。Graphics g = getGraphics();x1 = Math.abs(x1 - imgW);x2 = Math.abs(x2 - imgW);g.drawImage(img,0,0 ,imgW,imgH, x1,y1,x2,y2,canvas);}});JMenuItem childMenu2 = new JMenuItem("垂直");childMenu2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//垂直方向上,仅更改源矩形和目标矩形的y方向映射关系,即y的值。Graphics g = getGraphics();y1 = Math.abs(y1 - imgH);y2 = Math.abs(y2 - imgH);g.drawImage(img,0,0 ,imgW,imgH, x1,y1,x2,y2,canvas);}});Item2.add(childMenu1);Item2.add(childMenu2);//错切变换JMenuItem Item3 = new JMenuItem("图像错切");Item3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Graphics2D g = (Graphics2D)getGraphics();g.shear(0.3,0);g.drawImage(img, 0, 0, imgW, imgH, canvas);}});menu.add(Item3);}public static void main(String[] args){new DigitalImage().setVisible(true);}class Canvas extends JPanel{private static final long serialVersionUID = 1678373920467727747L;public void paint(Graphics g){super.paint(g);g.drawImage(img, 0,0, width, height, this);}}
} 

                                                  

                                                                                                                                  

                                             

                                           

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

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

相关文章

VS Code配置C/C++

VS Code 配置C/C  准备工作 Mingw-w64下载,在vscode中,点击帮助文档,进入如下界面。 在左侧选择CMingw-w64 onWindows,进入如下界面。可以参考文档进行配置。 点击文档中的mingw-w64链接进入如下界面。 点击黄色区域链接进入到里面…

人脑启发AI设计:让神经网络统一翻译语音和文本

来源:图灵人工智能作者:Glaciohound编辑:陈彩娴能够统一地理解语音和文本,是人类能够形成通用语言能力的重要原因。那么,人工智能是否也能如此?最近,来自字节跳动和UIUC的研究人员借鉴这一思路&…

32 bit 与 64 bit 程序(2)比较

32 bit 与 64 bit 程序(2)区别 由于操作系统内存分配的不同,导致软件开发过程中,需要编译不同版本的软件。 几个重要概念: (1)这里所说的的32位与64位程序,是指经过编译器编译后的可…

2021世界人工智能大会AI Debate:图神经网络是否是实现认知智能的关键?

来源:学术头条2021年7月10日,WAIC(2021世界人工智能大会)“图神经网络与认知智能前沿技术论坛”在上海世博中心成功举办。清华大学计算机科学与技术系教授李涓子,复旦大学计算机科学技术学院教授黄萱菁,清华…

Tensorflow深度学习应用(筑基篇)

筑基篇 #codinggbk1.张量 用于描述数据,可以理解为多维数组,包含张量的名字,阶数,形状数值类型. Tensor("Add:0", shape(m,n,k), dtypefloat32),表示节点名为Add,0代表第0个输出,shape表示为MxNxK维的数组&…

WPF中自动增加行(动画)的TextBox

WPF中自动增加行(动画)的TextBox 原文:WPF中自动增加行(动画)的TextBoxWPF中自动增加行(动画)的TextBox WPF中的Textbox控件是可以自动换行的,只要设置TextWrapping属性为”Wrap”即可&#xff…

基因婴儿事未了!人类将在2031年开始实现永生?

来源:WPR前段时间,中国首例“基因编辑”婴儿事件闹得沸沸扬扬,这件事也发酵到了国外,不到一天,各路外媒全部刷屏了。在这些外媒报道里,最有意思的要数《纽约时报》杂志了。他们就“基因编辑”问题,请到了作…

Tensorflow深度学习应用(进阶篇)

#codinggbk进阶篇相关数据:标签:要预测的事物特征:用于描述数据的输入变量样本:数据的特定实例有标签的样本:{特征,标签}无标的样本:{特征,...}模型:将样本映射到预测标签…

Java之Synchronized与锁升级

Synchronized与锁升级 一、概述 在多线程并发编程中 synchronized 一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不那么重了。 本文详细介绍 Java SE 1.6 中为…

机器学习算法

最近,机器学习岗位越来越火爆,那么自然对算法的一些能力要求也是越来越高,想要在求职者中脱颖而出,起步自然非常重要。 我和小伙伴们一起研讨了 2019 年校招的一些算法面试,有些是亲自经历的,也有伙伴分享的…

深度强化学习在智能城市领域应用介绍

来源:海豚数据科学实验室深度强化学习是近年来热起来的一项技术。深度强化学习的控制与决策流程必须包含状态,动作,奖励是三要素。在建模过程中,智能体根据环境的当前状态信息输出动作作用于环境,然后接收到下一时刻状…

Tensorflow深度学习应用(进阶篇)-回归(函数拟合训练)-可视化

#codinggbk进阶篇:多元回归:建模问题:Yx1xx1x2xw2x3xw3...xnxwnb,矩阵简化表示YXWbnumpy库基础:整型的一个数字, 不能取得其shape(维度),通过np.array()可以将其转换成一个标量&…

docker下创建crontab定时任务失败

创建过程 基础镜像采用的centos7.2,需要安装一下crontab,在dockerfile中加以下语句就可以了: # crontab jobs RUN yum -y install crontabs ADD ./run/nlp-cron /etc/cron.d/nlp-cron RUN chmod 0644 /etc/cron.d/nlp-cron RUN crontab /etc/…

Tensorflow深度学习应用(进阶篇)-1

#codinggbk 逻辑回归:逻辑回归需要将输出控制在[0,1]之间,可以使用函数将值映射在[0,1]之间Sigmod函数,逻辑回归一般采用对数损失函数;from pylab import mpl mpl.rcParams[font.sans-serif] [SimHei] #设置显示绘图显示中文 mp…

​20210716未来智能实验室收录资料

20210716未来智能实验室收录资料特别推荐:置顶收录未来智能实验室在人民日报《学术前沿》发表的城市大脑最新综述研究论文和报告《城市大脑的起源、发展与未来趋势》。本期收录前沿科技进展材料52篇1.《科学》:媲美AlphaFold2的蛋白质结构预测新工具问世…

Jq将字符串复制粘贴到剪贴板

第一种&#xff1a; 自己测试时 只适合于input 和textarea 但是针对于其他标签的复制就不能用了。代码如下&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><…

元宇宙深度研究报告:元宇宙是互联网的终极形态?

报告出品方&#xff1a;华安证券作者&#xff1a;尹沿技、张天、姚天航1 元宇宙&#xff1a;剑指互联网的“终极形态”1.1 元宇宙指向互联网的终极形态元宇宙&#xff08;Metaverse&#xff09;概念起源于科幻小说&#xff0c;或指向互联网的“终极形态”。Metaverse 一词来源于…

论文写作

1.文献综述 站在巨人的肩膀上&#xff0c;找到自己的创新点(别人没做过的),文献综述可以帮你理清思路&#xff0c;找到切入点&#xff0c;在别人的基础上&#xff0c;做出高于别人的综述&#xff0c;这正是文献综述的意义。 内容与结构规划 目的 找出研究的空白&#xff0c;基…

6、Django模板语法

123 转载于:https://www.cnblogs.com/pyedu/p/10289330.html

Unity基础

Unity3D 游戏开发 第一章 基础知识 Unity是一个用于创建游戏和三维互动内容的开发工具&#xff0c;是一个专业游戏引擎。 2D游戏&#xff1a;视角锁定&#xff0c;二维坐标。 3D游戏&#xff1a;任意视角&#xff0c;三维坐标。 虚拟现实&#xff08;VR&#xff09;&#x…