我们的网络应用程序允许用户以不同的格式(bmp,png和jpeg)下载动态生成的图像.我们的一些用户下载图像进行打印,因此我们希望允许他们在RGB或CMYK之间进行选择.有没有办法在创建RenderedImage/BufferedImage时指定颜色模型?如果没有,默认颜色模型是什么?如何将其更改为另一个?欢迎使用代码片段:)
谢谢,
奥利维尔.
我正在寻找用于构建 GUI 应用程序的 2D 场景图库。它应该很快,使用 Java2D 并与 Swing 兼容(可嵌入 Swing 应用程序并显示 Swing 组件)。对动画的支持是一个加分项。
我们目前正在使用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) 我刚开始学习有关Graphics2D类的基础知识,到目前为止,我能够绘制不同的对象和实现,ActionListener以实际在屏幕上移动它们onKeyPress.到目前为止一切都那么好,虽然我想做一些更复杂的事情.我想给出一个我的对象的路径,并仅在该特定路径上制作动画.
有点像,我会在天空画一条线,一架飞机应该坚持画线并保持自己在那条特定线上飞行.现在有可能吗?
我不需要任何代码,但很少有不同的方法或想法让我开始研究这个问题.我想法的可视化阐述如下.
起点 :

终点:

现在如上图所示,我的黄色框(在未来的平面中)应该在动画时坚持给定的路径(路径灰线)
我到目前为止的研究,
我搜索过我的流行语,比如java中的路径,发现Path2D和GeneralPath类,有没有人知道我是否可以用它来解决这个问题.
谢谢
鉴于以下内容:
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(),让它更大胆,但它仍然不如我想要的那样.
我怎样画一条粗线?
我刚刚完成我进入 第14届Ludum敢为天下先的48小时内的游戏制作大赛昨天,决定使用的Java2D为显卡做在Java中.
我对API并不熟悉并且没有做过很多图形编程,但是我的游戏很小(只有十几个非常小的移动对象)所以我认为我可以天真编程并且仍然没有遇到任何性能问题.
不用说,我错了.游戏大部分时间都表现不错,但是一旦有太多的"敌人"在屏幕上移动或者分辨率过高而开始变得明显变慢.
我已经确定了屏幕绘图功能的性能瓶颈,当这些功能被评论出来时游戏速度非常快.
有人可以告诉我这里我可能做错了什么吗?(非常短的)源代码位于此处,其中大部分是Main类,通常的嫌疑人是在内部游戏循环中调用的draw()函数.
我已经使用BufferStrategy来更新屏幕,所以除非我做错了,否则不应该是问题.
提前谢谢,Ido.
有没有很好的库来为Java中的图像渲染文本?
Java有一个2d文本库,http://java.sun.com/docs/books/tutorial/2d/text/index.html但不确定是否有更好的库可供使用.
我听说Java2D在幕后使用OpenGL进行渲染,我想知道是否值得使用JOGL及其所有的本机库,我的程序只是一个2D侧卷轴.我听说你必须使用某些技术和你需要避免的场景,以确保使用硬件加速但我不知道它们是什么(好吧,我知道一些,但我还没有找到它们的完整列表.)
我的问题不是关于如何用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) 我试图在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-2d ×10
java ×9
awt ×2
performance ×2
rotation ×2
cmyk ×1
graphics ×1
graphics2d ×1
java-canvas ×1
jogl ×1
lwjgl ×1
render ×1
rgb ×1
scala ×1
scenegraph ×1
swing ×1
text ×1
ubuntu ×1