Tag: graphics2d

如何用Java中的Graphics2D旋转文本?

我想使用Graphics2D在JPanel上旋转文本.. 我的代码是这样的: double paso=d.width/numeroBarras; double alto=datos[i].valor; Font fBarras=new Font(“Serif”, Font.PLAIN, 15); g2.setFont(fBarras); Rectangle2D barra=new Rectangle2D.Double(x,d.height-alto,paso,alto); //g2.fill(barra); x+=paso; g2.draw(barra); g2.rotate(-Math.PI/2); g2.setColor(Color.BLACK); g2.drawString(datos[i].titulo,(float)alto,(float)paso) 此方法必须在矩形上绘制一个矩形和一个文本,但是当我运行此方法时,所有图形都会旋转,我只想旋转文本。 谢谢 :)

在Swing里面的BufferedImage中绘画

我正在研究用java编写的绘图应用程序并遇到一些(更多)问题。 我有一个gui和一个工作程序(有点),我唯一的问题是用户绘制的线条和图形不会被保存(在绘制下一个之后消失)。 从过去的问题我了解到,我将需要使用BufferedImage来存储图形,然后在我的paint类中绘制它。 我的问题是,任何人都可以提供如何使用bufferedimage来存储和绘制绘图的基本解释/示例,如果需要,我将如何将绘制线的颜色和粗细传递到存储的数组中。 那就是全class同学。 package javapaint; import java.awt.*; import javax.swing.*; public class JavaPaintUI extends javax.swing.JFrame { /** Creates new form JavaPaintUI */ public JavaPaintUI() { initComponents(); } // private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); buttonGroup2 = new javax.swing.ButtonGroup(); jPanel4 = new javax.swing.JPanel(); jRadioButton9 = new javax.swing.JRadioButton(); jRadioButton10 = new javax.swing.JRadioButton(); jSlider2 = […]

Graphics2D和GraphicsContext之间的互操作性

我正在与一个寻求以Java为目标的图形渲染器的小组合作。 目前我正在试图弄清楚目标java.awt.Graphics2D是否会向前兼容。 也就是说,像JavaFX这样的其他库可以显示来自Graphics2D实例的渲染吗? java.awt.Graphics2D和javafx.scene.canvas.GraphicsContext之间是否存在互操作性? 或者,如果不直接在Graphics2D和GraphicsContext之间,是否有任何方法在JavaFX应用程序中显示Graphics2D渲染,类似于Swing在Panels中显示Graphics2D渲染? 编辑: 如果问题不明显,我对Java生态系统还不熟悉。 对于更多上下文,我在互联网搜索中发现的大多数内容都是示例/教程,解释了如何在JavaFX中完成AWT中的事情(参见示例文章 ),这不能回答我的问题,但是让我猜想没有互操作性。 但是,我希望更熟悉生态系统的人可以直接回答这个问题。

获得正确的图像观察者来旋转图像

所以我画了一个BufferedImage’鸟’,但我想根据它落下的角度旋转它。 我有一个鸟对象,它包含BufferedImage和一个render()方法,它旋转绘制它。 public void render(Graphics2D g, ImageObserver io) { double theta = Math.tan((height – pastHeight) / .875); System.out.println(theta); Graphics2D g2 = (Graphics2D) bird.getGraphics(); g2.drawImage(bird, 100, (int) height, null); g2.rotate(theta); g2.drawImage(bird, 100, (int) height, io); } 我这样称呼它 bird.render(g2, ???); 在我的jcomponent中的paintcomponent方法中。 唯一的问题是我不知道该使用什么作为我的ImageObserver …我已经尝试传递我的JFrame和我的JComponent但是当我这样做时图像不再出现…我会传递什么图像出现在我的窗口和/或我怎么能实现这种旋转?

如何实现椭圆GradientPaint?

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

使用AffineTransform进行Java图像旋转会输出黑色图像,但在resize时效果很好

我只是想将JPG文件旋转90度。 但是我的代码输出完全黑色的图像( BufferedImage )。 这是重现的方式:( 在这里下载3.jpg) private static BufferedImage transform(BufferedImage originalImage) { BufferedImage newImage = null; AffineTransform tx = new AffineTransform(); tx.rotate(Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2); AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BICUBIC); newImage = op.filter(originalImage, newImage); return newImage; } public static void main(String[] args) throws Exception { BufferedImage bi = transform(ImageIO.read(new […]

如何在Java中居中显示Graphics.drawString()?

我正在为我的Java游戏开发菜单系统,我想知道如何将Graphics.drawString()的文本居中,这样如果我想绘制一个中心点位于X: 50和Y: 50的文本Y: 50 ,文本宽30像素,高10像素,文本将从X: 35和Y: 45 。 我可以在绘制之前确定文本的宽度吗? 然后这将很容易数学。 编辑:我也想知道我是否可以获得文本的高度,以便我也可以垂直居中。 任何帮助表示赞赏!

鼠标移动时java绘制线条

我想在我的应用程序中添加一个function,允许用户通过在起始位置单击鼠标并在结束位置释放它来绘制直线。 当鼠标移动直到它最终被释放时,线应该移动; 类似于使用Microsoft Paint应用程序绘制线条的方式。 如何实现这一点,以便线条在移动时重新绘制,而不重新绘制可能已在该矩形区域中绘制的其他内容?

在java中绘制文本与大纲

我正在使用Java中的graphcis2d,目前正在使用它将文本绘制到bufferedImage中 Font font1 = new Font(“Arial”, Font.PLAIN, 120); g2d.setFont(font1); FontMetrics fm1 = g2d.getFontMetrics(font1); g2d.drawString(s[1], width/2-fm1.stringWidth(s[1])/2, height/4-70); 我想用不同的颜色轮廓绘制这个文本。 GlyphVector gv = font1.createGlyphVector(g2d.getFontRenderContext(), s[1]); Shape shape = gv.getOutline(); g2d.setStroke(new BasicStroke(4.0f)); g2d.translate(width/2-fm1.stringWidth(s[1])/2, height/4-70); g2d.draw(shape); 使用这种方法的问题是,我正在使用阿拉伯字符并使用GlyphVector反转顺序,并且不会使字母彼此流动。 有人可以向我解释如何用一种颜色呈现阿拉伯文本并用另一种颜色绘制轮廓吗? 下面是我将要使用的文本示例:الرحمن

在Java Graphics2D中绘制透明图像

我想在另一个上面绘制一个部分透明的图像(在物体上制作阴影)。 我目前正在使用java的Graphics2D类进行渲染,我被告知将复合设置为AlphaComposite,但这只是将它设置为完全透明。 我可以使用当前设置执行此操作吗? 我该怎么做才能解决这个问题? 这是我被告知的代码将使其部分透明: AlphaComposite ac = java.awt.AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.5F); g.setComposite(ac); (我顺便使用png图像) inheritance你的sscce(这些都是在不同的类,但我把它们放在一起以简化)(我在本地文件夹“Images”中使用一个名为“Test”的图像,你可以使用任何东西,只要它是一个png图像命名一样 import java.awt.AlphaComposite; import java.awt.Color; import java.awt.DisplayMode; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Window; import javax.swing.ImageIcon; import com.blazingkin.atrox.ScreenManager; public class AtroxAdventrum{ public static void main(String[] args) { new AtroxAdventrum().run(); } private static DisplayMode modes[] = { //new DisplayMode(1080,720,32,0), //new DisplayMode(1080,720,24,0), //new DisplayMode(1080,720,16,0), //new DisplayMode(1440,900,32,0), […]