标签: graphics2d

逐字符绘制文本时的字符串问题

我正在尝试逐个字符地绘制字符串,以将光照效果添加到由文本组成的形状中.

while (i != line.length()) {
c = line.substring(i, i + 1);

cWidth = g.getFontMetrics().stringWidth(c);

g.drawString(c, xx += cWidth, yy);
i++;
}
Run Code Online (Sandbox Code Playgroud)

问题是,当这两个字符作为字符串打印时,字符的宽度不是从另一个字符绘制的实际距离.有没有办法在graphics2d中获得正确的距离?

java string kerning graphics2d

5
推荐指数
1
解决办法
1198
查看次数

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

我刚开始学习有关Graphics2D类的基础知识,到目前为止,我能够绘制不同的对象和实现,ActionListener以实际在屏幕上移动它们onKeyPress.到目前为止一切都那么好,虽然我想做一些更复杂的事情.我想给出一个我的对象的路径,并仅在该特定路径上制作动画.

有点像,我会在天空画一条线,一架飞机应该坚持画线并保持自己在那条特定线上飞行.现在有可能吗?

我不需要任何代码,但很少有不同的方法或想法让我开始研究这个问题.我想法的可视化阐述如下.

起点 :

在此输入图像描述

终点:

在此输入图像描述

现在如上图所示,我的黄色框(在未来的平面中)应该在动画时坚持给定的路径(路径灰线)

我到目前为止的研究,

我搜索过我的流行语,比如java中的路径,发现Path2DGeneralPath类,有没有人知道我是否可以用它来解决这个问题.

谢谢

java java-2d graphics2d

5
推荐指数
1
解决办法
1285
查看次数

Java2D/Swing:将具有文本抗锯齿功能的组件渲染到BufferedImage

我想将一个Java Swing组件,例如一个JButton,我也放在JFrame上,渲染到BufferedImage.这通常有效,但有一个主要缺点:文本抗锯齿,尤其是"LCD"抗锯齿模式,在渲染到BufferedImage时不起作用.

我已经将一些示例代码放在一起来演示问题,但首先是我的系统信息:

  • 操作系统:Windows 7 64位
  • JVM:1.6.0_26-b03(32位)

下面的示例代码将创建一个简单的JFrame,在其上放置一个JButton,然后将JButton呈现为文件"test.png":

public class TextAntiAliasingTest
{
  public TextAntiAliasingTest() throws IOException
  {
    // Create Test-Button which will be rendered to an image
    JButton button = new JButton( "The Test-Button" );
    button.setSize( 200, 70 );
    button.setLocation( 200, 150 );

    // Create JFrame
    final JFrame frame = new JFrame();
    frame.setSize( 800, 600 );
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setLayout( null );
    frame.setLocationRelativeTo( null );
    frame.add( button );

    // Show JFrame
    SwingUtilities.invokeLater( new Runnable() {
        @Override public void …
Run Code Online (Sandbox Code Playgroud)

java bufferedimage java-2d antialiasing graphics2d

5
推荐指数
1
解决办法
2507
查看次数

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

我只是想将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 File(
            "3.jpg")));
    ImageIO.write(bi, "jpg", new File("out.jpg"));

}
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

(如果我将此黑色输出BufferedImage提供给图像缩放器库,它会很好地调整大小,原始图像仍然存在.)

java graphics2d

5
推荐指数
2
解决办法
9893
查看次数

拖动光标时如何绘制没有间隙的细线?

我有以下类,它在第0层刷新jpeg文件,第1层用于绘制/绘制/草绘与粉碎事物相关的任何内容.但是在我的绘画中,当我想做一条细线时,它就会断裂.因为鼠标光标移动需要较慢.

如何解决快速鼠标移动,线路仍然连接?

图像用鼠标拖动虚线

Annotation.java

package test;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Annotation {

  // Image
  private static Image backgroundImage;
  private static BufferedImage _bufImage = null;

  // Enum 
  public  static enum Shape { RECTANGLE, OVAL, LINE }
  private static enum State { IDLE, DRAGGING }       

  private static final Shape INIIIAL_SHAPE = Shape.RECTANGLE;
  private static final Color INITIAL_COLOR = Color.RED;  
  private static Shape _shape = INIIIAL_SHAPE;
  private static …
Run Code Online (Sandbox Code Playgroud)

java swing image graphics2d

5
推荐指数
1
解决办法
1562
查看次数

使用带有actionPerformed的repaint()方法

按下按钮时如何使用repaint()方法,Graphics p必须从头开始重新绘制所有内容?

谢谢.

  import javax.swing.Box;
  import javax.swing.JButton;
  import javax.swing.JTextField;
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;

  class fares extends JPanel{

    private static final long serialVersionUID = 1L;
    public static int xaxis1,xaxis2,yaxis3,yaxis4;

public ControlsB(square) {

    final JButton btn1 = new JButton("Resize");

    final Box b = Box.createHorizontalBox();
    b.add(new JLabel("Please enter range:  "));
    Box b0 = Box.createVerticalBox();//create a vertical box to stack the controls

    Box b1 = Box.createHorizontalBox(); // create a horizontal box for the x-axis

    //x-axis
    b1.add(new JLabel("mark "));
    b1.add(new JLabel("for"));

    f1.setMaximumSize(new Dimension(100,30)); …
Run Code Online (Sandbox Code Playgroud)

java swing repaint graphics2d japplet

5
推荐指数
2
解决办法
1万
查看次数

具有缓冲策略的OS X上的JFrame禁用圆角

我正在尝试在OS X中创建一个简单的JFrame窗口,并使用Graphics2d在其上呈现一个简单的黑色方块:

public Start() { 
    running = true;
    window = new JFrame("Finest Hour");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setPreferredSize(new Dimension(500, 500));
    window.setSize(window.getPreferredSize());
    FullScreenUtilities.setWindowCanFullScreen(window, true);
    window.setIgnoreRepaint(true);
    window.setVisible(true);
    window.createBufferStrategy(2);
    strategy = window.getBufferStrategy();
}

public static void main(String[] args) {
    Start s = new Start();
    s.loop();
}

public void loop() {
    Random random = new Random();
    while(running) {
        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(20, 20, 40, 40);
        strategy.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,当我使用strategy.show()时,窗口似乎在底部没有圆角.:

使用strategy.show

在没有缓冲策略的情况下渲染它,即:Graphics2D =(Graphics2D)window.getGraphics(); 生产一个圆角窗口:

在此输入图像描述

我知道这是一个非常小的问题,但它仍然很烦人.有任何解决这个问题的方法吗?

java macos graphics swing graphics2d

5
推荐指数
1
解决办法
467
查看次数

Java Graphics2D是否可以使用bloom效果?如果是这样,怎么样?

我一直试图使用Java制作类似2D空间的游戏,只是为了它的乐趣.我决定只使用Java的Graphics2D渲染我的游戏,因为我没有心情去学习LWJGL.但是,我刚才意识到它是多么有限.例如,我意识到一个漂亮的绽放/发光效果看起来非常好.但是,我在Google上找不到有关使用Graphics2D并且不使用其他库的任何内容.

我正在寻找什么样的绽放效果:https:
//gamedev.stackexchange.com/questions/18594/how-can-i-make-this-style-of-2d-glowing-graphics

绽放信息:http:
//en.wikipedia.org/wiki/Bloom_%28shader_effect%29

所以主要的问题是,有没有人知道使用Graphics2D添加锐利着色着色器效果的好方法?

java graphics shader bloom graphics2d

5
推荐指数
1
解决办法
1873
查看次数

如何旋转图形对象而不更改其位置?

我得到以下代码:

import java.awt.*;
import javax.swing.*;

public class GraphicPanel extends JPanel {

    public void paintComponent(Graphics g){

        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        g2d.setFont(new Font("Arial",Font.BOLD,24));
        g2d.drawString("A",300,250);
        g2d.rotate(45 * Math.PI/180);
        g2d.drawString("B",300,250);

    }

}
Run Code Online (Sandbox Code Playgroud)

它应该旋转B并将其放在A所在的相同位置,但是由于某种原因,B会在完全不同的位置出现。

我很确定我理解为什么。这是因为缩放,旋转等操作时会操纵整个协调系统(我正确吗?)

无论如何,我想知道如何旋转或缩放对象,并且仍然使它出现在以前的位置。例如,在一个游戏中,每10毫秒不断更新和显示一次自身,其中一个精灵正在旋转,但是仍然停留在10毫秒之前的位置。

编辑:试图事先搜索Google,猜想这个问题的措辞有点棘手,因为我发现没有帮助。

非常感谢 :)

java swing rotation graphics2d paintcomponent

5
推荐指数
1
解决办法
4013
查看次数

宠物小精灵黄色包裹过渡

因此,我一直试图在相当长的一段时间内制作一个非常精确的古老口袋妖怪黄色的克隆,一个令人费解的但仍然微妙的机制令我困惑.正如您在上传的图像中看到的那样,在进入另一个游戏位置(例如楼梯或进入建筑物)后,在两个阶段中进行了某种颜色操作.

实现这一目标的一种简单(和邋)的方式和我迄今为止使用的方法是为每个图像(精灵图块图,城镇图像)制作三个png,并且相应地调整它们的颜色以匹配过渡的每个阶段.当然,一段时间后,这将变得非常耗时.

所以我的问题是有没有人知道使用java和Graphics2D实现这种颜色处理效果的更好方法?

提前致谢,

亚历克斯

换行

java algorithm graphics2d

5
推荐指数
1
解决办法
279
查看次数