标签: graphics2d

Graphics2D.drawString中的换行问题

g2是类的一个实例Graphics2D.我希望能够绘制多行文本,但这需要换行符.以下代码在一行中呈现.

String newline = System.getProperty("line.separator");
g2.drawString("part1\r\n" + newline + "part2", x, y);
Run Code Online (Sandbox Code Playgroud)

java string newline graphics2d

47
推荐指数
2
解决办法
3万
查看次数

使用Graphics2D覆盖BufferedImage上的文本并返回BufferedImage

我已经检查了类似命名的问题,但他们没有回答这个用例.

基本上,我是在一个给定的坐标(x,y)上叠加一些文本(文本)我在包中有以下功能;

protected BufferedImage Process2(BufferedImage image){
    Graphics2D gO = image.createGraphics();
    gO.setColor(Color.red);
    gO.setFont(new Font( "SansSerif", Font.BOLD, 12 ));
    gO.drawString(this.text, this.x, this.y);
    System.err.println(this.text+this.x+this.y);
    return image;
}
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些显而易见的东西; 我可以找到的每一个对Graphics2D的引用都是处理游戏或直接写入文件,但我只想要返回一个BufferedImage.覆盖'渲染'

在当前代码中,图像显示为未更改.

谢谢!

java bufferedimage graphics2d

41
推荐指数
1
解决办法
7万
查看次数

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

我目前正在为我的菜单系统上的Java游戏,我不知道如何可以从中心的文本Graphics.drawString(),因此,如果我想画一个文本,其中心点是在X: 50Y: 50,和文字30像素宽,10像素高,文本将从X: 35和开始Y: 45.

在绘制文本之前,我可以确定文本的宽度吗?
然后这将很容易数学.

编辑:我也想知道我是否可以获得文本的高度,这样我也可以垂直居中.

任何帮助表示赞赏!

java text draw graphics2d centering

30
推荐指数
2
解决办法
4万
查看次数

绘制围绕一组点的曲线

我在飞机上有一套点.它们被划分为子集.我想围绕属于同一子集的点绘制闭合曲线,以便属于子集的点将位于曲线内部,而不属于该子集的点将位于曲线内部.因此,简单的圆形或凸包可能不起作用.

对于初学者,假设我只想在一组点附近有一条平滑的曲线(不要求它排除其他点)

任何想法如何在R?

---后来补充---

我最终看到的是这里的图形精神:https://tex.stackexchange.com/questions/1175/drawing-a-hypergraph - 虽然上下文不是超图,而是给定的点集和那些分区.

curve r graphics2d

27
推荐指数
3
解决办法
5464
查看次数

用Java绘制一个简单的折线图

在我的程序中,我想绘制一个简单的分数线图.我有一个文本文件,每行都是一个整数分数,我读入并希望作为参数传递给我的图形类.我在实现图形类时遇到了一些麻烦,我见过的所有示例都将它们的方法与它们的主要方法放在同一个类中,我不会这样做.

我希望能够将我的数组传递给对象并生成一个图形,但是在调用我的paint方法时,它要求我使用Graphics g ...这是我到目前为止所拥有的:

public class Graph extends JPanel {

    public void paintGraph (Graphics g){

        ArrayList<Integer> scores = new ArrayList<Integer>(10);

        Random r = new Random();

        for (int i : scores){
            i = r.nextInt(20);
            System.out.println(r);
        }

        int y1;
        int y2;

        for (int i = 0; i < scores.size(); i++){
            y1 = scores.get(i);
            y2 = scores.get(i+1);
            g.drawLine(i, y1, i+1, y2);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我已经插入了一个简单的随机数生成器来填充我的数组.

我有一个现有的框架,基本上想要实例化Graph类并将面板安装到我的框架上.我真的很抱歉这个问题看起来如此混乱,但我睡不着觉......

我主要陈述中的代码是:

testFrame = new JFrame();
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graph graph = new Graph();
testFrame.add(graph);
Run Code Online (Sandbox Code Playgroud)

我不确定SSCE究竟是什么,但这是我尝试的一个:

public class Test { …
Run Code Online (Sandbox Code Playgroud)

java swing linegraph graphics2d

24
推荐指数
4
解决办法
14万
查看次数

将BufferedImage设置为Java中的颜色

我需要创建一个BufferedImage具有指定背景颜色的矩形,在背景上绘制一些图案并将其保存到文件中.我不知道如何创建背景.

我正在使用嵌套循环:

BufferedImage b_img = ...
for every row
for every column
setRGB(r,g,b);
Run Code Online (Sandbox Code Playgroud)

但是当图像很大时它很慢.

如何以更有效的方式设置颜色?

java graphics bufferedimage image graphics2d

21
推荐指数
3
解决办法
4万
查看次数

使用Graphics2D翻转图像

我一直想弄清楚如何翻转图像一段时间,但还没想到.

我使用Graphics2D画一个Image

g2d.drawImage(image, x, y, null)
Run Code Online (Sandbox Code Playgroud)

我只需要一种在水平轴或垂直轴上翻转图像的方法.

如果你想要,你可以看看github上的完整源代码.

java swing image graphics2d

21
推荐指数
2
解决办法
4万
查看次数

在Linux上调整子像素坐标时Java 8图形故障

似乎在Java 8中,在子像素坐标上的划动被打破了.

我有三组案例,屏幕截图显示(列表示案例,行表示不同的笔画宽度):

Java 7u51(400%规模)
Java 7u51的截图(400%比例)
Java 8u60(400%规模)
Java 8u60的截图(400%比例)

  1. 在相同坐标上填充和描边.按预期工作,描边区域大于填充区域.
  2. 抚摸(通过笔划宽度)缩小并且居中(宽度的一半)为填充区域的内边界.这部分在Java 8中用于1px笔划,其中绘制发生在子像素坐标(第一行)上; 3px笔划没有这个问题(第三行).对于1px笔划,似乎0.5被四舍五入.
  3. 填充矩形以与案例2相同的方式收缩.我需要在支持子像素绘制的图形上使用,以便在单元格重叠时进行非重叠填充.在这里你可以看到填充操作向下舍入0.5到0,所以它只是抚摸问题.

代码如下:

import static java.awt.BasicStroke.*;

import java.awt.*;
import java.awt.geom.*;

import javax.swing.*;

public class TestCase
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Test case");
        frame.setSize(115, 115);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        frame.getContentPane().add(new TestPanel());

        frame.setVisible(true);
    }

    private static class TestPanel extends JPanel
    {
        TestPanel()
        {
            setOpaque(true);
        }

        @Override
        protected void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D) g;
            g2.setColor(Color.white);
            g2.fill(getBounds());

            Rectangle2D rect = new Rectangle2D.Double();
            Color background = new Color(0, 255, …
Run Code Online (Sandbox Code Playgroud)

java graphics2d java-8

20
推荐指数
1
解决办法
397
查看次数

旋转BufferedImage实例

我无法轮流BufferedImage显示.我认为旋转工作正常,但我实际上无法将其绘制到屏幕上.我的代码:

Class extends JPanel {
    BufferedImage img;
    int rotation = 0;

    public void paintComponent(Graphics g) {
        g.clearRect(0, 0, getWidth(), getHeight());
        img2d = img.createGraphics();
        img2d.rotate(Math.toRadians(rotation), img.getWidth() / 2, img.getHeight() / 2);
        g.drawImage(img, imgx, imgy, null);
        this.repaint();
    }
}
Run Code Online (Sandbox Code Playgroud)

这不适合我.我找不到任何方式绘制旋转img2dg.

编辑:我有多个被绘制的对象g,所以我不能旋转它.我需要能够单独旋转东西.

java swing bufferedimage rotation graphics2d

19
推荐指数
3
解决办法
5万
查看次数

在Java Graphics2D中绘制透明图像

我想在另一个上面绘制一个部分透明的图像(在物体上制作阴影).我目前正在使用java的Graphics2D类进行渲染,我被告知将复合设置为AlphaComposite,但这只是将它设置为完全透明.

我可以使用当前设置执行此操作吗?我该怎么做才能解决这个问题?

这是我被告知的代码将使其部分透明:

    AlphaComposite ac = java.awt.AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.5F);
    g.setComposite(ac);
Run Code Online (Sandbox Code Playgroud)

(我顺便使用png图像)

继承你的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),
        //new DisplayMode(1440,900,24,0),
        //new DisplayMode(1440,900,16,0),

    };
    private boolean running = true;
    public ScreenManager s;

    public void stop(){
        running = false;
    }

    public void run(){
        try{
            init();
            gameLoop();
        }finally{ …
Run Code Online (Sandbox Code Playgroud)

java transparent graphics2d

19
推荐指数
1
解决办法
3万
查看次数