Tag: java 2d

用Java绘制一个漂亮的圆圈

我正在使用Java Graphics而且我一直在变得“丑陋”。 这是我的Java程序所做的 这是在Matlab中做的同样的事情 我认为Java显然不像Matlab那样“好看”,特别是在圆的边缘。 请注意,这与分辨率无关……这些图像的大小几乎相同。 另请注意,我已经设置了渲染提示。 这是一个独立的主要function,你可以运行来测试它。 package test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; public class SimplePaint02 { private static final int LINE_THICKNESS = 4; private static final int LINE_GAP = […]

PNG – 是否可以使用Java 2D减少调色板?

如果我将PNG图像打开为BufferedImage,是否可以减少PNG图像中的调色板以减少颜色(每个像素的位数/颜色深度较少)? 例如,如果你在维基百科中查看颜色深度 ,我想在我的PNG图像中使用16种颜色(右边第3张图像)。 如果Java 2D无法实现,那么是否有一个库可以让我有效地完成这项工作?

用于GUI的Java 2D场景图库

我正在寻找用于构建GUI应用程序的2D场景图库。 它应该很快,使用Java2D并与Swing兼容(可嵌入Swing应用程序并显示Swing组件)。 支持动画是一个加号。 你有一些图书馆的经验吗? 有没有我错过的图书馆? 我必须补充一点,我并没有被Scala库完全冒犯。 项目场景图 似乎相当快 只有GPL(没有LGPL) 支持动画 2年前放弃了 作为JavaFX的前身,它是Sun的产品 G 不知道它是否快速 LGPL 没有动画 最后一个版本Dec 09 Piccolo2D 用于“可缩放的用户界面” 看起来像一个学术项目 高活动的谷歌代码项目 BSD许可证 不知道如果它快 不知道它是否有动画 Pulpcore 是一个游戏库 针对applet部署(使用它作为应用程序是hacky) 非常快 支持动画 没有发展2 – 3年 可能根本没有Swing支持 jTem 更大项目的一部分(乍一看) freeBSD许可证 没有动画支持 看起来很小

如何使用Java2D创建硬件加速映像?

我正在尝试创建一个快速图像生成器,它可以进行大量的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(); 但是,如果我这样做: System.out.println(bImage.getCapabilities(gc).isAccelerated()); 输出始终为false ,即使我使用-Dsun.java2d.opengl = True启动JVM也会打印该行: OpenGL pipeline enabled for default config on screen 0 我正在做一个BufferedImage,因为最后我想用ImageIO.write(bImage,“PNG”,file)将它保存到PNG文件中; 我可以创建一个VolatileImage,它会说它是加速的,但ImageIO在尝试保存时并不喜欢它,并说该图像无法转换为RenderedImage。 有关如何获得可存储到磁盘的加速图像的任何想法? 此外,我不想创建一个VolatileImage和复制到BufferedImage来保存,因为我的图像真的很大,我会遇到内存不足的问题……

如何初始化图形? 因为它说没有初始化

我有我的部分代码,但它不会初始化,我不知道如何做到这一点。 它一直给我一个错误,比如memor.main中线程“main”java.lang.NullPointerException中的exception(memor.java:131) import java.awt.*; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.SwingConstants; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class memor extends JFrame { private static final long serialVersionUID = 1L; public static void main(String args[]){ final JPanel pan; GridLayout h=new GridLayout(3,3); pan =new JPanel(h); JButton button1= new JButton(“1”); pan.add(button1); final JLabel label1= […]

如何绘制多个矩形

所以我试图制作一个简单的程序,你点击屏幕,它会创建一个块落下并与下方较大的块碰撞并坚持下去。 有点像一个简单的碰撞程序。 问题是当我创建一个块时,它先前删除了块。 我做了一个数组,但它仍然这样做。 你们有谁知道我做错了什么吗? 我确定它是一个简单的修复。 public class Screen extends JPanel implements Runnable { public static JLabel statusbar; //displays a status bar showing what mouse movements are taking place private Image cat; //image of the cat public int xCoord ; //get the coordinates of the mouse pressed public int yCoord ; public int xCreate; public […]

如何制作(keyPressed)KeyListener?

我试着写一个非常简单的程序,它允许你用箭头键控制精灵并在屏幕上移动。 据我所知,要做到这一点,我需要一个keyPressed() KeyListener 。 我相信我是基于Java Doc正确地做这个,但是当我按下指定键时它没有返回正确的输出。 有人可以告诉我我的代码有什么问题,如果可能的话,提供一个关于这个类的用法的简单例子吗? 谢谢! (注意,代码未完成) import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.*; public class Display extends JPanel implements ActionListener, KeyListener { Display() { // super(); loadImages(); initTimer(); this.addKeyListener(this); } BufferedImage sprite; Timer timer; int up = 0; public […]

集成图形上的慢Java2D绘图

我正在开发一个简单的2D游戏,通过Java2D API渲染。 我注意到,当我尝试在集成显卡上绘图时性能崩溃。 我已经在我的主钻机上测试了这款游戏,其中包括更新的ATI Radeon和我5岁的笔记本电脑,它还有一个(令人难以置信的过时)Radeon。 两者都得到了很好的FPS,但是当我尝试使用我的Intel i5的板载HD 4000显卡时,它的速度大约是20 FPS。 我正在使用全屏独占模式。 在任何特定时刻,我一次渲染大约1000张图像。 令人讨厌的是,当我尝试getAvailableAcceleratedMemory()时,它只返回-1这张卡,它似乎拒绝加速任何图像。 有没有人有任何想法如何解决这个问题? 渲染代码: Graphics g = bufferStrategy.getDrawGraphics(); g.drawImage(img, x, y, img.getWidth(), img.getHeight(), null) g.dispose(); bufferStrategy.show(); 图片加载代码: BufferedImage I = null; I = ImageIO.read(new File(currentFolder+imgPath)); imgMap.put(imgIdentifier, I); 图像存储在由字符串标识的BufferedImages的散列图中,因此当实体需要绘制并对其进行成像时,只需将其从散列图中取出并绘制它。 在当前情况下,实体主要是地板和墙砖,因此它们永远不会改变(因此不必从第一次以外的哈希图中获取图像)。 编辑 – 我已经合并了MadProgrammer的方法,但它没有改变我的FPS。

自定义形状旋转问题

我试图围绕其中心旋转自定义形状,但无法按预期获得结果。 我想要的是什么 * 形状应围绕其中心旋转而不会自行移动。 * 我的解决方案目前正在做的是围绕其中心旋转整个形状,每次旋转都会改变其位置。 我有多个形状,所以我创建了一个类来封装一个形状,其变换在下面的类中 public abstract class Shoe implements Shape, ShoeShape { // variable declaration /** * */ public Shoe() { position = new Point(); lastPosition = new Point(); } public void draw(Graphics2D g2, AffineTransform transform, boolean firstTime) { AffineTransform af = firstTime ? getInitTransform() : getCompositeTransform(); if (af != null) { […]

Graphics – 如何使用方法create(int x,int y,int width,int height)和translate(int x,int y)?

我正在尝试做我的计算机科学作业,但是当我试图使用以下方法时,我被卡住了。 public Graphics create(int x,int y,int width,int height) 即创建基于此Graphics对象的新Graphics对象,但具有新的转换和剪辑区域。 参数: x – x坐标。 y – y坐标。 width – 剪切矩形的宽度。 height – 剪切矩形的高度。 public abstract void translate(int x,int y) 将图形上下文的原点转换为当前坐标系中的点(x,y)。 任何人都可以解释并举例说明如何使用它们吗? 我试图这样做.. public Graphics drawPlayer1() { myPencil.up(); myPencil.move(-620,300); myPencil.down(); myPencil.fillCircle(20); myPencil.up(); myPencil.move(-590,300); myPencil.drawString(“Player1: ” + player1); p1.create(-620,300,40,40); return p1; }//end drawPlayer1 当它涉及到p1.create(-620,300,40,40)时,它给我一个nullPointerException;