g2是类的一个实例Graphics2D.我希望能够绘制多行文本,但这需要换行符.以下代码在一行中呈现.
String newline = System.getProperty("line.separator");
g2.drawString("part1\r\n" + newline + "part2", x, y);
Run Code Online (Sandbox Code Playgroud) 我已经检查了类似命名的问题,但他们没有回答这个用例.
基本上,我是在一个给定的坐标(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游戏,我不知道如何可以从中心的文本Graphics.drawString(),因此,如果我想画一个文本,其中心点是在X: 50和Y: 50,和文字30像素宽,10像素高,文本将从X: 35和开始Y: 45.
在绘制文本之前,我可以确定文本的宽度吗?
然后这将很容易数学.
编辑:我也想知道我是否可以获得文本的高度,这样我也可以垂直居中.
任何帮助表示赞赏!
我在飞机上有一套点.它们被划分为子集.我想围绕属于同一子集的点绘制闭合曲线,以便属于子集的点将位于曲线内部,而不属于该子集的点将位于曲线内部.因此,简单的圆形或凸包可能不起作用.
对于初学者,假设我只想在一组点附近有一条平滑的曲线(不要求它排除其他点)
任何想法如何在R?
---后来补充---
我最终看到的是这里的图形精神:https://tex.stackexchange.com/questions/1175/drawing-a-hypergraph - 虽然上下文不是超图,而是给定的点集和那些分区.
在我的程序中,我想绘制一个简单的分数线图.我有一个文本文件,每行都是一个整数分数,我读入并希望作为参数传递给我的图形类.我在实现图形类时遇到了一些麻烦,我见过的所有示例都将它们的方法与它们的主要方法放在同一个类中,我不会这样做.
我希望能够将我的数组传递给对象并生成一个图形,但是在调用我的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) 我需要创建一个BufferedImage具有指定背景颜色的矩形,在背景上绘制一些图案并将其保存到文件中.我不知道如何创建背景.
我正在使用嵌套循环:
BufferedImage b_img = ...
for every row
for every column
setRGB(r,g,b);
Run Code Online (Sandbox Code Playgroud)
但是当图像很大时它很慢.
如何以更有效的方式设置颜色?
我一直想弄清楚如何翻转图像一段时间,但还没想到.
我使用Graphics2D画一个Image与
g2d.drawImage(image, x, y, null)
Run Code Online (Sandbox Code Playgroud)
我只需要一种在水平轴或垂直轴上翻转图像的方法.
似乎在Java 8中,在子像素坐标上的划动被打破了.
我有三组案例,屏幕截图显示(列表示案例,行表示不同的笔画宽度):
Java 7u51(400%规模)

Java 8u60(400%规模)

代码如下:
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) 我无法轮流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)
这不适合我.我找不到任何方式绘制旋转img2d到g.
编辑:我有多个被绘制的对象g,所以我不能旋转它.我需要能够单独旋转东西.
我想在另一个上面绘制一个部分透明的图像(在物体上制作阴影).我目前正在使用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)