java graphics2d旋转_反向Java Graphics2D缩放和旋转坐标
小编典典
编辑
:如果捕获当前Graphics2D绘画的变换,请当心将Graphics2D其重新用于同一窗口/面板的多个轻量级子项,因为这样变换将相对于父组件,而鼠标坐标将相对于父组件这个孩子。您需要捕获对
转换 所做的 更改 ,而不是其最终值。例:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) throws MalformedURLException, IOException {
JFrame frame = new JFrame();
Box box = new Box(BoxLayout.Y_AXIS);
BufferedImage image = ImageIO.read(new URL("http://sstatic.net/so/img/logo.png"));
AffineTransform xfrm1 = AffineTransform.getScaleInstance(0.95, 1.25);
xfrm1.rotate(-0.3);
box.add(new ImageView(image, xfrm1));
AffineTransform xfrm2 = AffineTransform.getShearInstance(0.1, 0.2);
xfrm2.scale(1.3, 0.9);
box.add(new ImageView(image, xfrm2));
frame.add(box);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
@SuppressWarnings("serial")
class ImageView extends JComponent {
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
try {
paintXfrm = g2d.getTransform();
paintXfrm.invert();
g2d.translate(getWidth() / 2, getHeight() / 2);
g2d.transform(xfrm);
g2d.translate(image.getWidth() * -0.5, image.getHeight() * -0.5);
paintXfrm.concatenate(g2d.getTransform());
g2d.drawImage(image, 0, 0, this);
} catch (NoninvertibleTransformException ex) {
ex.printStackTrace();
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(image.getWidth() * 2, image.getHeight() * 2);
}
ImageView(final BufferedImage image, final AffineTransform xfrm) {
this.canvas = image.createGraphics();
canvas.setColor(Color.BLACK);
canvas.setStroke(new BasicStroke(3.0f));
this.image = image;
this.xfrm = xfrm;
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
try {
mouseDownCoord = e.getPoint();
paintXfrm.inverseTransform(mouseDownCoord, mouseDownCoord);
} catch (NoninvertibleTransformException ex) {
}
}
@Override
public void mouseExited(MouseEvent e) {
mouseDownCoord = null;
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
Point p = e.getPoint();
try {
paintXfrm.inverseTransform(p, p);
if (mouseDownCoord != null) {
canvas.drawLine(mouseDownCoord.x, mouseDownCoord.y, p.x, p.y);
for (Component sibling: getParent().getComponents()) {
sibling.repaint();
}
}
mouseDownCoord = p;
} catch (NoninvertibleTransformException ex) {
ex.printStackTrace();
}
}
});
}
private Graphics2D canvas;
private BufferedImage image;
private AffineTransform xfrm;
private AffineTransform paintXfrm;
private Point mouseDownCoord;
}
2020-09-08
java graphics2d旋转_反向Java Graphics2D缩放和旋转坐标相关推荐
- java graphics2d旋转_反转Java Graphics2D缩放和旋转坐标
如果您保留了在绘制图像时使用的AffineTransform的副本,则可以使用 AffineTransform.inverseTransform(Point2D ptSrc, Point2D ptDs ...
- Java苹果手机缩略图旋转_【Java实例】使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)...
正版现货ruby on rails教程水手册 87.9元 包邮 (需用券) 去购买 > 1 需求 表哥需要给儿子报名考试,系统要求上传不超过30KB的图片,而现在的手机随手一拍就是几MB的,怎么 ...
- java 文字水印 旋转_【Java实例】使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)...
1 需求 表哥需要给儿子报名考试,系统要求上传不超过30KB的图片,而现在的手机随手一拍就是几MB的,怎么弄一个才30KB的图片呢? 一个简单的办法是在电脑上把图片缩小,然后截屏小图片,但现在的电脑屏 ...
- java web图片旋转_修正web项目中图片旋转方向
# 使用 imagemagick 旋转 查看照片 EXIF 信息,Exif 中的图片旋转信息储存在``Orientation``中. ``` identify -verbose xxx.jpg ``` ...
- java图片镜像代码_java图片基本操作-缩放,旋转,镜像,拼接
/*** 缩放*/ public static void zoomByScale(BufferedImage bufImage, double scale) throwsIOException {// ...
- java生成pdf旋转_基于Java实现PDF文本旋转倾斜
本文介绍通过Java程序在PDF文档中设置文本旋转.倾斜的方法.设置文本倾斜时,通过定义方法TransformText(page);并设置page.getCanvas().skewTransform( ...
- java 画笔粗细_用JAVA做个画笔,有画笔和橡皮功能就行。越简单越好
展开全部 新建一个java文件,取名叫做PaintJava.java 代码如下: import java.applet.*; import java.awt.*; import java.awt.ev ...
- java打印计算机_在Java程序中实现高精度打印
在Java环境中,可以使用 java.awt.Toolkit.getScreenResolution()可以得到屏幕每英寸的象素数,但是好像没有什么方法能知道某一台打印机的分辨率,更别提去控制打印粒度 ...
- java图片叠加_[原创]JAVA中图片上叠加文字的方法
--sunfruit JDK:1.3.x以上 功能:下面是一个简单在图片上面叠加文字的方法,有朋友如果有这方面的问题,就起个了解的作用 代码如下: import java.io.IOException ...
最新文章
- python打开word并在前台显示_Python自动化办公之Word,全网最全看这一篇就够了
- Flutter framework在线上构建时的包大小优化
- MySQL学习笔记07【事务、用户管理和权限管理】
- VTK:图表之BreadthFirstDistance
- 技术贴:asp.net实现唯一账户在线 禁止同一帐号同时在线 asp.net实现您的帐号在别处登录,您已被迫下线!...
- 回顾 | 使用Visual Studio Code进行端到端应用程序开发
- 前端学习(3053):vue+element今日头条管理-展示列表分页
- 培智计算机教学论文,【培智数学论文】_培智数学教学论文
- hive解绑邮箱_django使用QQ企业邮箱发送邮件
- 文件在IDEA中已进行Git的Commit操作,使其从暂存区提交到本地仓库,但是未Push到远程仓库,此时进行Pull操作出现代码冲突
- 【半年总结】---凤凰涅槃,历久弥新
- 小学-综合素质【3】
- 蓝桥杯 算法提高 盾神与条状项链
- 特长生模拟——买装备
- [愚见]Lightening Network for Low-LightImage Enhancement
- Mysql 新建用户并且授权用户的访问数据库权限以及可以对数据的操作类型
- 1040 有几个PAT 测试点34
- java argox_HTML+CSS3再加一点点JS做的一个小时钟
- 几种常用网络请求汇总
- Web GIS 地图投影与坐标系的研究与总结