Tag: affinetransform

如何实现椭圆GradientPaint?

我们知道在Java中有一个名为RadialGradientPaint的类,我们可以使用它来为圆形绘制渐变画。 但是我想要一个椭圆形(椭圆形) GradientPaint 。 如何实现椭圆GradientPaint ?

AffineTransform会截断图片,我有什么不对?

我这里有一个尺寸为2156×1728的黑/白png文件,我希望使用AffineTransform旋转90度。 生成的图像没有正确的比例。 这里有一些示例代码(假设我已成功将png文件加载到BufferedImage中): public BufferedImage transform(BufferedImage image){ System.out.println(“Input width: “+ image.getWidth()); System.out.println(“Input height: “+ image.getHeight()); AffineTransform affineTransform = new AffineTransform(); affineTransform.setToQuadrantRotation(1, image.getWidth() / 2, image.getHeight() / 2); AffineTransformOp opRotated = new AffineTransformOp(affineTransform, AffineTransformOp.TYPE_BILINEAR); BufferedImage transformedImage = opRotated.createCompatibleDestImage(image, image.getColorModel()); System.out.println(“Resulting width: “+ transformedImage.getWidth()); System.out.println(“Resulting height: “+ transformedImage.getHeight()); transformedImage = opRotated.filter(image, transformedImage); return transformedImage; } 输出相应: 输入宽度:2156 […]

图形上下文在第一次绘制时未对齐

我一直在为另一个问题找到答案,并遇到了一个我以前从未见过的奇怪问题…… 基本上,程序使用AffineTransform来提供Graphics元素的翻译,缩放和旋转,简单的东西,之前完成了一千次 问题是,当屏幕第一次出现时,输出不是应该的位置,但是一旦我触摸其中一个控件(调整其中一个幻灯片),它就会跳到正确的位置。 根据屏幕截图, Graphics内容似乎被其他控件的数量错位。 如果我从GUI中删除控件,它将出现在正确的位置(中间)。 如果我调整窗口大小,它不能解决问题,它只会在其中一个滑块触发DrawPane上的repaint时DrawPane … 我已经在输出中添加了诊断信息,并且所有值都是相同的 – 也就是说,它们在程序首次启动时以及将所有滑块值调整为初始值时打印相同的值。 如果我从AffineTransform删除setRotation和setScale调用,则不会修复它。 如果我删除了setTranslation ,那么在面板更新之前,方块最初不会被绘制(它在屏幕外绘制) 如果我使用Graphics2D g2d = (Graphics)g; 而不是g.create() ,相同的结果(是的,我在paintComponent方法退出之前重置了转换;)) import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.geom.AffineTransform; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public […]

使用AffineTransform将Shape缩放/转换为给定的Rectangle

我正在尝试扩展/翻译java.awt。 使用AffineTransform进行形状 ,以便在定义的边界Rectangle中绘制它。 此外,我想在具有“ 缩放 ”参数的绘图区域中绘制它。 我尝试了各种AffineTransform连接,但我找不到正确的序列。 例如,以下解决方案是错误的: double zoom=(…);/* current zoom */ Rectangle2D viewRect=(…)/** the rectangle where we want to paint the shape */ Shape shape=(…)/* the original shape that should fit in the rectangle viewRect */ Rectangle2D bounds=shape.getBounds2D(); double ratioW=(viewRect.getWidth()/bounds.getWidth()); double ratioH=(viewRect.getHeight()/bounds.getHeight()); AffineTransform transforms[]= { AffineTransform.getScaleInstance(zoom, zoom), AffineTransform.getTranslateInstance(-bounds.getX(),-bounds.getY()), AffineTransform.getTranslateInstance(viewRect.getX(),viewRect.getY()), AffineTransform.getScaleInstance(ratioW, ratioH) }; AffineTransform […]

用Java旋转数据和文本的坐标平面

我需要: 1.)移动原点并旋转坐标平面,使x值向右前进,y值从新原点向上进行(需要在下面的代码中为内部蓝色矩形的左下角)。 这将使我能够在下面的代码中绘制x,y坐标对的点。 2.)绘制数据图的y轴上的抽动标记的旋转标签。 下面的代码设置了这个问题。 它有效,除了两个问题: 1.)绘制数据点,左上角为原点,y值向下下降 2.)屏幕上没有绘制y轴上的标记标记 任何人都可以告诉我如何修复下面的代码,以便它修复这两个问题,并做上面第一段描述的内容? 代码在以下两个java文件中: DataGUI.java import java.awt.*; import java.util.ArrayList; import javax.swing.*; class DataGUI extends JFrame{ DataGUI() { super(“X,Y Plot”); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setPreferredSize(new Dimension(800, 400)); this.pack(); this.setSize(new Dimension(800, 600)); this.setLocationRelativeTo(null); setLayout(new GridLayout()); ArrayList myDiffs = new ArrayList(); myDiffs.add(25.0); myDiffs.add(9.0); myDiffs.add(7.0); myDiffs.add(16.0); myDiffs.add(15.0); myDiffs.add(6.0); myDiffs.add(2.0); myDiffs.add(8.0); myDiffs.add(2.0); myDiffs.add(27.0); myDiffs.add(14.0); myDiffs.add(12.0); myDiffs.add(19.0); myDiffs.add(10.0); […]

在java中旋转图像

我想要旋转图像。 我有一个包含JLabel的JInternalFrame 。 标签包含图像。 旋转图像后,我需要调整内部框架的大小。 我目前的代码旋转图像,但图像边缘周围有黑色,并且偏离中心。 对于如何解决这个问题,有任何的建议吗? public void rotateIcon(int angle) { int w = theLabel.getIcon().getIconWidth(); int h = theLabel.getIcon().getIconHeight(); int type = BufferedImage.TYPE_INT_RGB; // other options, see api BufferedImage DaImage = new BufferedImage(h, w, type); Graphics2D g2 = DaImage.createGraphics(); double x = (h – w)/2.0; double y = (w – h)/2.0; AffineTransform at = […]