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()可以将其转换成一个标量&…

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

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

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

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

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

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

Unity基础

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

英特尔史上最大收购!英特尔拟300亿美元收购GF,审批成关键!

来源:EETOP据《华尔街日报》报道,知情人士称,英特尔打算斥资约300 亿美元收购晶圆代工大厂格罗方德(GlobalFoundries),以加速生产更多芯片,如果收购成功,这将是英特尔有史以来最大的…

Unity 基本操作

基本操作 物体的组合 1.从需要的组合的物体中选择一个作为父对象,其他的物体作为子对象,即把子对象拖拽到父对象里,操作父对象即可实现整体操作,效果如下。 2.在组合物体中,父对象的坐标是该组合体的坐标&#xff0c…

OpenAI雄心勃勃的机器人计划失败了:强化学习没法用?

来源:机器之心曾经训练出单手解魔方机器人的 OpenAI,眼下已经解散了机器人团队。这家执着于实现通用人工智能(AGI)的公司现在放弃了机器人研究,理由是「数据不够丰富」。近期,OpenAI 公司联合创始人 Wojcie…

Unity-游戏小地图实战(前述知识点回顾与运用)

阶段知识回顾与运用---游戏中小地图实战 对于多个摄像机,每个摄像机都带有音频监听器,会出现错误,因为我们只需要一个音频监听器,为了消除错误,需要移除其他摄像机的音频监听器,只保留主摄像机的音频监听器…