在 Java 中渲染矢量形状
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1557835/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Rendering vector shapes in Java
提问by David Winslow
I have a series of shapes (Approx. 50), that each have 5 points, and a color (with alpha transparency). I want to render these shapes onto a pixel grid.
我有一系列形状(大约 50 个),每个形状有 5 个点和一个颜色(具有 alpha 透明度)。我想将这些形状渲染到像素网格上。
I program as an amateur, so I have no idea how I should go about doing this.
我是业余编程,所以我不知道我应该怎么做。
Can someone give me a starting point, or some pseudo-code?
有人可以给我一个起点或一些伪代码吗?
Thanks in advance.
提前致谢。
回答by I82Much
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.List;
import java.util.ArrayList;
import java.awt.Point;
import javax.swing.JFrame;
import java.awt.Color;
import java.util.Random;
import java.awt.Polygon;
import java.awt.Shape;
public class GraphicsTest extends JFrame {
private List<ColoredShape> shapes;
private static final int NUM_SHAPES = 50;
private static final int NUM_POINTS_PER_SHAPE = 5;
private static final int WIDTH = 640;
private static final int HEIGHT = 480;
private Random randomGenerator;
public GraphicsTest(String title) {
super(title);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(WIDTH, HEIGHT);
randomGenerator = new Random();
initShapes();
}
private void initShapes() {
shapes = new ArrayList<ColoredShape>(NUM_SHAPES);
for (int i = 0; i < NUM_SHAPES; i++) {
Point[] points = getRandomPoints();
Color color = getRandomColor();
shapes.add(i, new ColoredShape(points, color));
}
}
private Point[] getRandomPoints() {
Point[] points = new Point[NUM_POINTS_PER_SHAPE];
for (int i = 0; i < points.length; i++) {
int x = randomGenerator.nextInt(WIDTH);
int y = randomGenerator.nextInt(HEIGHT);
points[i] = new Point(x, y);
}
return points;
}
/**
* @return a Color with random values for alpha, red, green, and blue values
*/
private Color getRandomColor() {
float alpha = randomGenerator.nextFloat();
float red = randomGenerator.nextFloat();
float green = randomGenerator.nextFloat();
float blue = randomGenerator.nextFloat();
return new Color(red, green, blue, alpha);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
for (ColoredShape shape : shapes) {
g2.setColor(shape.getColor());
g2.fill(shape.getOutline());
}
}
public static void main(String[] args) {
GraphicsTest b = new GraphicsTest("Testing polygons");
}
private class ColoredShape {
private Polygon outline;
private Color color;
public ColoredShape(Point[] points, Color color) {
this.color = color;
// Would be better to separate out into xpoints, ypoints, npoints
// but I'm lazy
outline = new Polygon();
for (Point p : points) {
outline.addPoint((int) p.getX(), (int) p.getY());
}
}
public Color getColor() {
return color;
}
public Shape getOutline() { return outline; }
}
}
回答by David Winslow
Java has a pretty nice 2d graphics API included with it. I suggest you take a look at http://java.sun.com/docs/books/tutorial/2d/index.htmlfor a tutorial on the basics.
Java 包含一个非常好的 2d 图形 API。我建议您查看http://java.sun.com/docs/books/tutorial/2d/index.html以获得有关基础知识的教程。


