标签: java-2d

如何在Java中将RGB图像转换为CMYK,反之亦然?

我们的网络应用程序允许用户以不同的格式(bmp,png和jpeg)下载动态生成的图像.我们的一些用户下载图像进行打印,因此我们希望允许他们在RGB或CMYK之间进行选择.有没有办法在创建RenderedImage/BufferedImage时指定颜色模型?如果没有,默认颜色模型是什么?如何将其更改为另一个?欢迎使用代码片段:)

谢谢,

奥利维尔.

java rgb bufferedimage java-2d cmyk

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

用于 GUI 的 Java 2D 场景图形库

我正在寻找用于构建 GUI 应用程序的 2D 场景图库。它应该很快,使用 Java2D 并与 Swing 兼容(可嵌入 Swing 应用程序并显示 Swing 组件)。对动画的支持是一个加分项。

  • 你对一些图书馆有什么经验吗?
  • 有没有我错过的图书馆?
  • 我必须补充一点,我并没有完全被 Scala 库冒犯。

项目场景图

  • 似乎相当快
  • 仅 GPL(无 LGPL)
  • 支持动画
  • 被遗弃 2年前
  • 作为 JavaFX 的前一部分,它是 Sun 的产品

G

  • 不知道快不快
  • LGPL
  • 没有动画
  • 最新版本 12 月 9 日

短笛2D

  • 对于“可缩放的用户界面”
  • 看起来像一个学术项目
  • 活跃度高的谷歌代码项目
  • BSD 许可证
  • 不知道它是否很快
  • 不知道它是否有动画

纸芯

  • 是一个游戏库
  • 针对小程序部署(使用它作为应用程序是hacky)
  • 非常快
  • 支持动画
  • 2-3年没有发展
  • 可能根本没有 Swing 支持

jTem

  • 更大项目的一部分(乍一看)
  • freeBSD 许可证
  • 没有动画支持
  • 看起来很小

java user-interface scala java-2d scenegraph

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

Java2D:BufferedImage在Ubuntu上没有加速

我们目前正在使用Java2D API开发Java游戏,并且在Ubuntu环境中运行它时会遇到一些奇怪的性能问题.

我们的帧速率从Windows和Mac系统上的平均62fps下降到Ubuntu上的大约10fps.经过几个小时的调试和测试各种JVM标志后,似乎是使用位掩码的BufferedImages在Ubuntu下没有加速,因为

System.out.println(img.getCapabilities(config).isAccelerated());
Run Code Online (Sandbox Code Playgroud)

打印错误.

目前我们正在加载我们的图像

img = ImageIO.read(url);
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法创建与设备兼容的BufferedImage:

private static BufferedImage createCompatibleImage(BufferedImage img) {

    // Get default graphics device
    GraphicsDeviceService graphicsDevice = ServiceProvider
            .getService(GraphicsDeviceService.class);
    GraphicsConfiguration config = graphicsDevice
            .getGraphicsConfiguration();

    // Get desired transparency mode
    int transparency = img.getColorModel().hasAlpha() ? Transparency.BITMASK
            : Transparency.OPAQUE;

    // Create device compatible buffered image
    BufferedImage ret = config.createCompatibleImage(img.getWidth(),
            img.getHeight(), transparency);

    // Draw old image onto new compatible image
    Graphics2D graphics = ret.createGraphics();
    graphics.drawImage(img, 0, 0, null);
    graphics.dispose();

    // Return compatible image
    return ret;
} …
Run Code Online (Sandbox Code Playgroud)

java ubuntu performance java-2d

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

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

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

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

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

起点 :

在此输入图像描述

终点:

在此输入图像描述

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

我到目前为止的研究,

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

谢谢

java java-2d graphics2d

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

在扩展Canvas时使用drawLine()绘制粗线

鉴于以下内容:

public class NavigationCanvas extends Canvas implements MouseListener,MouseMotionListener,KeyListener  {

    public void paint(Graphics g)
    {

        // some code 
        // more 
        // ...

        g.setColor(Color.black);

        //  drawing each Line
        for (int i=0; i<length; i++) 
        {
            Line2D currLine  = m_lines.get(i);

            g.drawLine((int)currLine.getX1(),(int)currLine.getY1(),
                (int)currLine.getX2(),(int)currLine.getY2());   
            g.drawLine((int)currLine.getX1()+1,(int)currLine.getY1()+1
                ,(int)currLine.getX2()+1,(int)currLine.getY2()+1);
            g.drawLine((int)currLine.getX1()+2,(int)currLine.getY1()+2
                ,(int)currLine.getX2()+2,(int)currLine.getY2()+2);
        }


    }       
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我绘制线条时,currLine我得到这个:

在此输入图像描述

正如你所看到的,我打了3个电话drawline(),让它更大胆,但它仍然不如我想要的那样.

我怎样画一条粗线?

java awt java-2d java-canvas

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

简单的Java2D应用程序中的可怕性能

我刚刚完成我进入 第14届Ludum敢为天下先的48小时内的游戏制作大赛昨天,决定使用的Java2D为显卡做在Java中.

我对API并不熟悉并且没有做过很多图形编程,但是我的游戏很小(只有十几个非常小的移动对象)所以我认为我可以天真编程并且仍然没有遇到任何性能问题.

不用说,我错了.游戏大部分时间都表现不错,但是一旦有太多的"敌人"在屏幕上移动或者分辨率过高而开始变得明显变慢.

我已经确定了屏幕绘图功能的性能瓶颈,当这些功能被评论出来时游戏速度非常快.

有人可以告诉我这里我可能做错了什么吗?(非常短的)源代码位于此处,其中大部分是Main类,通常的嫌疑人是在内部游戏循环中调用的draw()函数.

我已经使用BufferStrategy来更新屏幕,所以除非我做错了,否则不应该是问题.

提前谢谢,Ido.

java performance java-2d

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

在Java中渲染图像中的文本

有没有很好的库来为Java中的图像渲染文本?

Java有一个2d文本库,http://java.sun.com/docs/books/tutorial/2d/text/index.html但不确定是否有更好的库可供使用.

java image-processing java-2d

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

Java2D可以和LWJGL和JOGL一样快吗?

我听说Java2D在幕后使用OpenGL进行渲染,我想知道是否值得使用JOGL及其所有的本机库,我的程序只是一个2D侧卷轴.我听说你必须使用某些技术和你需要避免的场景,以确保使用硬件加速但我不知道它们是什么(好吧,我知道一些,但我还没有找到它们的完整列表.)

java graphics java-2d jogl lwjgl

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

如何使用Java2D使旋转文本看起来很好

我的问题不是关于如何用Java2D旋转文本; 我知道该怎么做.我不知道的是如何使旋转的文字"看起来很好".例如,如果在PowerPoint中创建文本框并旋转它,则无论旋转角度如何,文本都会显得清晰明了.但是,绘制的文本g2D.drawString()在0或90度时看起来没问题但在其他角度看不太好.有没有办法操纵文本来清理或锐化它?如果是这样,那么如果有人能指出我要去学习如何做到这一点,我会非常感激.

下面是一个小程序,说明了我在说什么.旋转时较大的字体不是太糟糕但仍然看起来不太专业.旋转时较小的字体很糟糕.

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

public class RotateTest extends JPanel {
    String message = "How does this text look?";

    public RotateTest() {
        this.setPreferredSize(new Dimension(640, 280));
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2D = (Graphics2D) g;

        g2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                       RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        g2D.setFont(new Font("MyriadPro", Font.BOLD, 20));
        g2D.drawString(message, 80, 20);

        AffineTransform orig = g2D.getTransform();

        double angle = Math.toRadians(7.0);
        g2D.rotate(-angle, -10, 80);
        g2D.drawString(message, 80, 80);
        g2D.setTransform(orig);

        angle = Math.toRadians(30.0);
        g2D.rotate(-angle, -40, 80);
        g2D.drawString(message, 60, 260);
        g2D.setTransform(orig);

        g2D.setFont(new Font("MyriadPro", …
Run Code Online (Sandbox Code Playgroud)

text render rotation java-2d

4
推荐指数
1
解决办法
4101
查看次数

Java GUI的旋转和Rectangle的翻译

我试图在JPanel中绘制一个矩形,它可以平移,然后自行旋转以模仿汽车的运动.我已经能够使矩形平移和旋转,但它围绕(0,0)的原点旋转.我非常高兴能够让矩形移动和旋转,因为我是Java GUI的新手,但我似乎无法得到如何使矩形围绕自身旋转,因为我尝试了更多它,当我初始化矩形并将其旋转45度,它的位置发生了变化,我假设是旋转方法附加的变换矩阵.

我通过网站查看了如何解决这个问题,但是我只找到了如何旋转矩形而不是如何旋转和移动模拟汽车的运动.我认为它关注它的变换矩阵,但我只是在猜测.所以我的问题是如何让矩形能够旋转并在自身周围移动而不是JPanel中的一个点.

这是我到目前为止提出的代码:

public class Draw extends JPanel implements ActionListener {


private int x = 100;
private int y = 100;
private double theta = Math.PI;

Rectangle rec = new Rectangle(x,y,25,25);

Timer timer = new Timer(25,this);

Draw(){
    setBackground(Color.black);
    timer.start();
}

public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D)g;     
    g2d.setColor(Color.white);
    rec.x = 100;
    rec.y = 100;
    g2d.rotate(theta);
    g2d.draw(rec);
    g2d.fill(rec);

}

public void actionPerformed(ActionEvent e) {
    x = (int) (x + (Math.cos(theta))*1);
    y = (int) (y + (Math.sin(theta))*1);
    theta = …
Run Code Online (Sandbox Code Playgroud)

java swing awt rotation java-2d

4
推荐指数
1
解决办法
7316
查看次数