Tag: java 2d

如何生成使用Java绘制的图像的物理尺寸

我在Swing Applet中的JPanel上画了一个正方形。现在我想打印这个物理尺寸为50cm * 50厘米的正方形到纸上。这意味着正方形的打印尺寸在现实世界中是50 * 50厘米我画了小程序面板。打印机使用400 DPI进行打印。 那么我如何将这些与测量联系起来呢? 在哪种文件格式我应该保存我的绘图,以便它在打印时具有准确的测量,等于打印机DPI和图像的质量保持打印。 谢谢Mihir Parekh

以OO方式进行游戏设计

我正在设计一个简单的游戏,它使用Java 2D和牛顿物理。 目前我的主要“游戏循环”看起来像: do { for (GameEntity entity : entities) { entity.update(gameContext); } for (Drawable drawable : drawables) { drawable.draw(graphics2d); } } while (gameRunning); 当指示实体自我更新时,它将根据施加于其上的当前力调整其速度和位置。 但是,我需要实体展示其他行为; 例如,如果玩家射击了“坏人”,则该实体应该被销毁并从游戏世界中移除。 我的问题 :以面向对象的方式实现这一目标的最佳方法是什么? 到目前为止,我所见过的所有例子都将游戏循环合并到一个名为Game的God类中,它执行以下步骤: 检测碰撞,检查是否坏人杀死,检查是否被玩家杀死,重新绘制等等并封装所有游戏状态(剩余生命等)。 换句话说,它是非常程序化的 , 所有逻辑都在Game类中 。 有人能推荐更好的方法吗? 以下是我到目前为止所考虑的选项: 将GameContext传递给每个实体,如果需要,实体可以从中移除自身或更新游戏状态(例如,如果玩家被杀,则“不运行”)。 将每个GameEntity注册为中心Game类的监听器,并采用面向事件的方法; 例如,碰撞会导致CollisionEvent被发射到CollisionEvent中的两个参与者。

旋转球失去锋利和颜色

package testIDE; import java.awt.BorderLayout; import java.awt.Graphics2D; import java.awt.GridBagLayout; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import Utils.MyJFrame; public class ExampleClass { public static void main(String[] args) { JFrame ballRotate = new BallRotate(); } } class BallRotate extends MyJFrame { ArrayList degree = new ArrayList(); BufferedImage backGroundImage = getBufferedImage(“testIDE/buttonDefaultImage.jpg”); […]

如何在java中绘制自定义圆角矩形?

我知道如何绘制圆角矩形,但我想分别为每个角定义圆度,并绘制如下图所示的内容:

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

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

在Java中组合区域时舍入不准确?

我正在使用Java中的Areas 。 我的测试程序绘制三个随机三角形并将它们组合成一个或多个多边形。 Areas是.add()编辑后,我使用PathIterator跟踪边缘。 但是,有时候,“ Area对象不会按照它们的组合进行组合……正如您在上一张图片中看到的那样,将绘制额外的边缘。 我认为问题是由Java的Area类中的舍入不准确引起的(当我调试测试程序时, Area在使用PathIterator之前显示间隙),但我不认为Java提供了任何其他方式来组合形状。 有解决方案? 示例代码和图像: import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Area; import java.awt.geom.Line2D; import java.awt.geom.Path2D; import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.Random; import javax.swing.JFrame; public class AreaTest extends JFrame{ private static final long serialVersionUID = -2221432546854106311L; Area area = new Area(); ArrayList areaSegments = new ArrayList(); AreaTest() […]

如何从java中的许多tile创建一个大图像文件?

我的程序生成10 x 10个图像,每个像素为3000×3000像素(目前保存到100个名为image_x_y.jpg文件) 我想将这100个图像组合成一个大图像,而不是将所有内容都加载到内存中。 我的目标是创建一个30’000 * 30’000像素的大图像文件。 我正在寻找一种方法来做到这一点, 而不使用JAI(不能从公共maven存储库安装,我不明白为什么) 有没有办法用纯java2D做到这一点? 或者是否存在另一个库,能够处理这个? 我最初的想法是创建一个非常大的缓冲图像,从支持DataBuffer到磁盘上的文件。 但我不确定这是可能的。 有没有人这样做过?

将图像拆分为可点击区域

有没有办法将图像分割成区域(现在它是JLabel,但我可以在必要时更改它)? 我在我的程序中使用swing并且我有一个图像(这个例子是正方形),里面有一些三角形,星形和梯形(它可以是JPG,PNG等)。 想法是用户将在其中一个形状中单击,然后我将在用户单击的区域顶部放置另一个小图标。 用户可以点击多个区域,但在一天结束时,我需要知道点击了哪些形状。 似乎有人可能吗?

Java:获得FontMetrics实例的更方便的方法

是否有更友好的方式来获取FontMetrics的实例 FontMetrics fm = Graphics.getFontMetrics(Font); 我讨厌这种方式,因为下面的例子: 如果您想在游戏中创建一个菜单,并且您希望屏幕中心的所有菜单项都需要fontmetrics。 但是,大多数情况下,菜单项是可点击的。 所以我创建了一个Rectangles数组,所有的矩形都适合于项目,所以当按下鼠标时,我可以简单地使用 for (int i = 0; i < rects.length; i++) if (rects[i].contains(mouseX, mouseY)) { … } 但是为了创建rects,我还需要FontMetrics作为它们的坐标。 所以这意味着我必须在菜单的paint-method中构造所有的矩形。 所以我想要一种获取FontMetrics的方法,这样我就可以在构造函数调用的方法中构造Rectangles。

如何在JScrollPane上禁用滚轮滚动事件的默认绘制行为

我最近购买了Filthy Rich Clients这本书,我发现它非常有用和有趣。 在本书的一个例子的基础上,我尝试实现一个自定义ScrollPane,它在要显示的组件的视图底部显示一个“阴影”。 我最终得到了以下代码。 它工作但不完美。 特别是当我通过拖动滚动条滚动窗格时,一切正常,绘画非常流畅。 但是当我用鼠标滚动滚动时,阴影闪烁,我不明白为什么。 谁能帮我? 编辑:滚动窗格中的任何组件都会发生同样的事情。 编辑代码以显示两个帧以查看问题。 编辑2:我已将问题与滚动窗格处理鼠标滚轮事件的方式隔离开来。 滚动滚动窗格时,根据滚动的方向稍微向上或向下复制视口的内容,然后绘制进入视图的区域。 我的代码使整个组件“脏”但是在组件移动了内容之后。 所以你会看到“影子”渐变不合适,直到发出重画。 有关如何禁用此function的任何想法? import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Container; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.RepaintManager; public class Test { public static void main(String[] args) { JFrame […]