Tag: graphics2d

如何使用另一个象限作为坐标在JPanel上绘图?

我想通过覆盖paintComponent在JPanel上绘制一些形状。 我希望能够平移和缩放。 使用AffineTransform和Graphics2D对象上的setTransform方法可以轻松进行平移和缩放。 在做完之后,我可以使用g2.draw(myShape) myShape)绘制形状。形状用“世界坐标”定义,因此在平移时它可以正常工作,我必须在绘制之前将它们转换为canvas/ JPanel坐标。 现在我想改变坐标的象限 。 从JPanel和计算机经常使用的第四象限到用户最熟悉的第一象限。 X是相同的,但是Y轴应该向上而不是向下增加。 通过new Point(origo.x, -origo.y);很容易重新定义origo new Point(origo.x, -origo.y); 但是如何在这个象限中绘制形状? 我想保持形状的坐标(在世界坐标中定义)而不是在canvas坐标中。 所以我需要以某种方式转换它们,或者转换Graphics2D对象,我想有效地做到这一点。 我也可以使用AffineTransform吗? 我的绘图代码: public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.blue); AffineTransform at = g2.getTransform(); at.translate(-origo.x, -origo.y); at.translate(0, getHeight()); at.scale(1, -1); g2.setTransform(at); g2.drawLine(30, 30, 140, 20); g2.draw(new CubicCurve2D.Double(30, 65, 23, 45, 23, 34, 67, […]

如何从Graphics g获取像素颜色

在我的学习上,我有图形课程。 我们有Bresenham用于画线和圆形画。 在下一课我将学习洪水填充。 对于洪水填充,我需要获得像素颜色以检查是否需要填充或不填充。 这是我所有课程的代码。 package lab1; import javax.swing.*; import java.awt.*; import java.util.Random; public class Lab1 extends JPanel{ private Random random = new Random(); private boolean isRed; private String s = “”; private int Fill(int x,int y,Graphics g) { if ((x < 0) || (y = 600) || (y >= 600)) return 0; return 0; […]

用按钮在屏幕上移动球。 无法编程初始位置。

所以我正在做这个练习,我需要创建一个程序,通过按下四个按钮之一在屏幕上移动一个小球。 我已经完成了,但后来我想让初始位置位于屏幕的中心,所以我将值getWidth()/ 2分配给xCoord,将getHeight()/ 2分配给yCoord(首先我没有构造函数,然后当它不起作用时我添加了构造函数并添加了repaint(),因此将调用paintComponent())但是当我启动程序时,球仍然在左上角。 我怎样才能解决这个问题? PS我也会感谢对代码的任何评论。 谢谢。 package movingaball; import java.awt.BorderLayout; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MovingABall extends JFrame { private JButton jbtLeft = new JButton(“Left”); private JButton jbtRight = new JButton(“Right”); private JButton jbtUp = new JButton(“Up”); private JButton jbtDown = new JButton(“Down”); private BallPanel ballPanel = new BallPanel(); public MovingABall […]

Graphics2D绘图性能

我正在尝试使用Swing组件中的Java Graphics2D对象手动绘制“东西”,并且当我达到大约2000个正方形时,我命令对象绘制它变得非常慢。 我不知道这是否“普遍”。 2000个对象是否真的“渲染”了? Graphics2D对象是不是非常高效? 我应该停在现在的位置,而不是在尝试更复杂的东西之前切换到JOGL并且为时已晚?

如何从Graphics2D捕获图形基元到SVG

我需要从调用java.awt.Graphics2D捕获图形基元。 调用是通过开源工具包(Apache的PDFBox)进行的,通常在JPanel中呈现。 我想拦截这些调用并将它们转换为SVG,这样我就可以构建一个非图形数据模型(例如表格,图形等)。 在这个阶段,我会为任何类型的黑客感到高兴,其中可能包括: 用MyGraphics2D替换Graphics2D库 找到支持SVG输出并捕获它的Graphics2D 拦截对Graphics2D的调用(我不喜欢因为我必须管理仿射变换) 附属问题:Graphics2D是否使用图形库? 在这种情况下,如果我在此级别捕获,则应该应用转换。

如何在Graphics2D上下文中的Path2D对象上设置Rectangle的动画

我刚刚开始学习有关Graphics2D类的基础知识,到目前为止,我能够绘制不同的对象并实现ActionListener以便通过onKeyPress在屏幕上实际移动它们。 到目前为止一切都那么好,虽然我想做一些更复杂的事情。 我想给出一个我的对象的路径 ,并仅在该特定路径上制作动画。 有点像,我会在天空画一条线,一架飞机应该坚持画线并保持自己在那条特定线上飞行。 现在有可能吗? 我不需要任何类型的代码,但是很少有不同的方法或想法可以让我开始研究这个问题。 我想法的可视化阐述如下。 起点 : 终点: 现在如上图所示,我的黄色框(在未来的平面中)应该在动画时保持给定的路径(路径灰线) 我到目前为止的研究, 我搜索了我的流行语,比如java中的路径,找到了Path2D和GeneralPath类,有谁知道我是否可以用它来解决这个问题。 谢谢

java围绕中心旋转矩形

我想围绕它的中心点旋转一个矩形,它应该保留在它应该被绘制的位置并在该空间中旋转 这是我的代码: AffineTransform transform = new AffineTransform(); transform.rotate(Math.toRadians(45),rectangle.width/2, rectangle.height/2); Shape transformed = transform.createTransformedShape(rectangle); g2.fill(transformed) 旋转矩形但是在屏幕的不同部分绘制,我该如何纠正?

Java BufferedImage可以保存不需要的背景颜色

提前谢谢你的帮助 描述:程序绘制,显示和保存图像。 它的工作原理如下:对象本身扩展了Frame。 在构造函数中,该对象创建一个BufferedImage,并调用一个绘制到该图像上的方法。 然后,它将图像显示在帧上。 最后,它将图像保存到文件中(我不关心它使用的是什么格式)。 主程序创建对象,其余部分完成。 问题:保存的文件始终具有彩色背景! 由于显示的图像很好,这尤其奇怪。 如果我在ImageIO.write()中使用“jpg”格式,背景会偏红。 如果我使用“png”格式,背景为深灰色。 我花了一段时间在这上面,我仍然不知道到底发生了什么! import java.awt.Frame ; import java.awt.image.BufferedImage ; import java.io.IOException ; import java.awt.event.WindowEvent ; import java.awt.event.WindowAdapter ; import java.awt.Toolkit ; import java.awt.Graphics2D ; import java.awt.Graphics ; import java.awt.Color ; import java.awt.Dimension ; import javax.imageio.ImageIO ; import java.io.File ; import java.awt.geom.Rectangle2D; public class HGrapher extends Frame{ […]

Java中的Polygon.Double在哪里?

我再次做Java图形(Graphics2D),但我注意到没有Polygon.Double或Polygon.Float类,而有Rectangle2D.Float和Rectangle2D.Double类。 有人知道为什么吗? 我只需要使用双精度作为点绘制三角形。

Java applet重新绘制一个移动的圆圈

我刚从Pygame搬过来,所以applet中的Java 2D对我来说有点新鲜,特别是在重新绘制屏幕时。 在pygame中你可以简单地做display.fill([1,1,1])但是如何在Java中的applet中做到这一点? 我理解使用repaint()但是没有清除屏幕 – 任何移动的物体都没有从屏幕上“移除”,所以你得到一长串画圆。 这是我一直在测试的代码: package circles; import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Random; public class circles extends Applet implements Runnable { private static final long serialVersionUID = -6945236773451552299L; static Random r = new Random(); String msg = “Click to play!”; static int w = 800, h = 800; int[] […]