我通过将立方贝塞尔曲线拼接在一起创建了一个"blob"形状(截图如下).我希望能够检测到曲线越过自身或其他曲线的情况,并且想知道是否有推荐的方法或已知的算法来执行此操作?
我的一个想法是使用a FlatteningPathIterator将形状分解为直线段然后检测给定的段是否与另一个段相交,但我对是否有更好的方法感兴趣(因为这将具有二次性能).如果我继续追求这种方法,Java中的库函数是否检测两个线段是否重叠?
谢谢.
没有交叉
No Crossover http://www.freeimagehosting.net/uploads/7ad585414d.png
交叉
我正在尝试创建一个快速图像生成器,它可以进行大量的2D变换和形状渲染,因此我尝试使用BufferedImage,然后获取Graphics2D对象来执行我的所有绘图.我现在主要关注的是make非常快,所以我正在创建一个像这样的BufferedImage:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
BufferedImage bImage = gc.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
Graphics2D graphics = bImage.createGraphics();
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
System.out.println(bImage.getCapabilities(gc).isAccelerated());
Run Code Online (Sandbox Code Playgroud)
输出始终为false,即使我使用-Dsun.java2d.opengl = True启动JVM也会打印该行:
OpenGL pipeline enabled for default config on screen 0
Run Code Online (Sandbox Code Playgroud)
我正在做一个BufferedImage,因为最后我想用ImageIO.write(bImage,"PNG",file)将它保存到PNG文件中;
我可以创建一个VolatileImage,它会说它是加速的但ImageIO在尝试保存时并不喜欢它,并说该图像无法转换为RenderedImage.有关如何获得可存储到磁盘的加速图像的任何想法?此外,我不想创建一个VolatileImage和副本到BufferedImage保存,因为我的图像真的很大,我会遇到内存不足的问题......
该Shape接口由爪哇2D的对象(实现Arc2D,Area,CubicCurve2D,Ellipse2D,GeneralPath等.).
一些具体对象被标记为Serializable并且可以使用对象序列化来存储和恢复,但是其他对象Area不会实现接口并抛出错误.
但是因为我们经常被警告说这种天真的序列化在Java实现或版本中不一定是稳定的,所以我更喜欢使用某种形式的序列化.
这导致我们使用XMLEncoder和存储/恢复XML XMLDecoder,但是它能够处理更少的Java 2D Shape对象.
两者的一些结果可以在下面看到.我们从6个形状开始,并尝试通过对象序列化和标准XML序列化来存储/恢复它们.

我们如何Shape通过XML正确存储所有对象?
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.beans.*;
import java.io.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.TitledBorder;
public class Serialize2D {
private JPanel ui;
Serialize2D() {
initUI();
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new GridLayout(0, 1));
int[] xpoints = {205, 295, …Run Code Online (Sandbox Code Playgroud) 我不确定使用Java的简单2d图形的最佳api是什么.我知道java.awt.Graphics2D是标准,但它已被替换?Swing是Java GUI应用程序的新API,但它似乎对我想要的东西有点沉重.我真正想要的是像C SDL库.
我需要使用java.awt.Graphics绘制一条线,但只应渲染位于矩形外部的线条部分.
是否可以使用图形剪辑支持或者我是否需要自己计算交叉点并剪切线?
是否有一个简洁的示例,说明如何上传图像,调整图像大小,将其存储在数据库中,然后使用Lift提供图像?
我确信我可以从文件上传,Java 2D API,Lift Mapper和Response API中将它拼凑在一起.但有没有我可以遵循的示例代码,以"正确"或推荐的方式?
任何人都可以为Scala推荐一个好的2D动画包吗?我更喜欢已经有一些基本事件处理的东西,更像是JavaFX喜欢processing.org.
我正在使用Java2D库在Java中创建2D游戏,我真的需要一个浮点精度的Polygon对象,我可以用它来绘制游戏对象并对它们进行碰撞检测.遗憾的是,Java的Polygon对象仅以int精度出现,并且没有像Rectangle和Rectangle2D那样的等效Polygon2D.我已经做了足够的研究,看到我有一些选择,但它们似乎都不是很好.
使用Path2D.根据Java开发人员在本论坛发帖称,缺少Polygon2D是一种疏忽,但其建议的替代品是Path2D.不幸的是,Path2D没有提供访问其各个顶点或边的方法,这是我进行碰撞检测所需要的(具体来说,我需要得到一个与每条边正交的矢量).
实现我自己的Polygon2D实现Shape接口,这样我仍然可以传递给它Graphics2D.draw(Shape).这看起来很难.Shape接口需要像contains(Rectangle2D)和那样的棘手实现方法getPathIterator(AffineTransform).对于getPathIterator特别,好像是为了实现它我需要返回类型的PathIterator的对象,但也有接口的PathIterator在公共AWT封装没有具体实现.
在一个"记住"各个顶点并将它们提供给客户端的对象中包裹Path2D.当我需要一个记住其组件形状的区域时,这对我有用:我将它包装在一个实现Shape接口的CompoundShape类中,并将所有Shape方法转发到Area的实现,同时跟踪添加到其中的每个Shape. ArrayList中的区域.这样做的问题是,如果我跟踪两个floats 数组中的各个顶点,就没有办法将它们暴露给用户而没有用户更改顶点的可能性 - 并且因为直接阵列访问会发生这种情况,内部Path2D不会收到有关更改的通知.
复制Polygon.java.Java的Polygon类的实际源代码可以在grepcode.com上找到,我可以简单地用ints 替换与顶点相关的floats来获得Polygon2D.不幸的是,当我尝试这个时,该行import sun.awt.geom.Crossings;抛出一个编译器错误,说"由于对所需库C:\ Program Files\Java\jre7\lib\rt.jar的限制,无法访问类型交叉".根据这个问题,因为Sun的许可协议阻止您用自己的替换核心Java类,但Polygon不会尝试这样做 - 它只是创建了一个类型为sun.awt.geom.Crossings的对象,没有替换或扩展发生了,我确保将我的Polygon副本放在一个名为"java"的包中.
进行此操作的最佳方法是什么?我很欣赏这些选项中的一个如何工作的建议,或者对于没有遇到这些问题的另一个选项的想法.
嗨,我正在努力提高自己的java2D,首先我正在处理绘制多边形.但是,我无法在框架上看到多边形.我阅读了一些教程和示例,但正如我所说,我面临着问题.这是绘制多边形的示例代码;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.JFrame;
public class jRisk extends JFrame {
private JFrame mainMap;
private Polygon poly;
public jRisk(){
initComponents();
}
private void initComponents(){
mainMap = new JFrame();
mainMap.setSize(800, 600);
mainMap.setResizable(false);
mainMap.setVisible(true);
mainMap.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int xPoly[] = {150,250,325,375,450,275,100};
int yPoly[] = {150,100,125,225,250,375,300};
poly = new Polygon(xPoly, yPoly, xPoly.length);
}
protected void paintComponent(Graphics g){
super.paintComponents(g);
g.setColor(Color.BLUE);
g.drawPolygon(poly);
}
/**
* @param args
*/
public static void main(String[] args) {
new jRisk();
}
}
Run Code Online (Sandbox Code Playgroud) 使用AWT,我想通过在隐藏窗口时停止绘制到屏幕来保存像flash一样的资源.但首先,我需要一种方法来检测Frame是否被一个或多个其他窗口完全覆盖.Windows可能不是来自同一个应用程序,所以我不能只是总结他们的形状.
所以问题是,是否可以检测窗口是否被其他应用程序的其他窗口覆盖?