Tag: java 2d

如何获得高质量的缩略图

我正在尝试使用Java和Scalr 3.2创建此图像的高质量缩略图 这是相关的源代码,其中THUMB_WIDTH = 77 , THUMB_HEIGHT = 57 BufferedImage srcImg = ImageIO.read(new File(sourceFile)); BufferedImage dstImg = Scalr.resize(srcImg, Scalr.Method.QUALITY, THUMB_WIDTH, THUMB_HEIGHT); ImageIO.write(dstImg, format, new File(destFile)); 如果我使用format = “png” ,结果如下: 如果我使用format = “jpg” ,结果如下: 通过imagemagick识别,我发现JPEG的质量保存为75,完全不足以创建漂亮的缩略图。 PNG对我来说也不好看。 以下是原始文件的标识输出和两个缩略图: $ identify 42486_1.jpg 42486_s1.jpg 42486_s1.png 42486_1.jpg JPEG 580×435 580×435+0+0 8-bit DirectClass 50.6KB 0.000u 0:00.000 42486_s1.jpg[1] JPEG 77×58 77×58+0+0 8-bit […]

如何在不使用JProgressBar的情况下制作进度条?

我正在考虑将进度条放入我正在制作的游戏中,从5到20之间的随机数减少到0。这是我的代码到目前为止: 包软件; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; import javax.swing.Timer; public class CountDownProgressBar extends JPanel { RandomValues randomNum; int timeValue; Timer timer; int length, newLength; public CountDownProgressBar() { timer = new Timer(24, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (int i = timeValue; i > 0; –i) { […]

如何使用java2d在jFrame中显示图片?

我是Java和Netbeans的新手。 在许多其他语言中,这是一件简单的事情。 但在打破了我的大脑思维之后,我做不到。 我的疑问很容易解释。 如何在运行时,在通用JFrame中使用java2D显示位图(存储在硬盘驱动器上)? 我需要编辑,或创建什么? 这样做很简单吗? 提前致谢…

在Panel中居中字符串

我正试图在一个Panel中居中一个String。 目前我这样做: public void paintComponent(Graphics g) { super.paintComponent(g); int stringWidth = 0; int stringAccent = 0; int xCoordinate = 0; int yCoordinate = 0; // get the FontMetrics for the current font FontMetrics fm = g.getFontMetrics(); /** display new message */ if (currentMessage.equals(message1)) { removeAll(); /** Centering the text */ // find the center location […]

关于在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); } […]

绘制大麻曲线

灵感来自数学网站的大麻方程 (它指的是Wolfram Research Cannabis Curve ),我想知道..我们如何使用Java-2D绘制这条曲线?

自定义边框外的组件绘画

在这个自定义边框类中,我定义了一个RoundRectangle2D形状。 此对象用于绘制边框。 不幸的是,由于JComponent的paint方法在paintBorder之前调用paintComponent ,因此将Graphics剪辑设置为RoundRectangle2D形状没有任何效果; 即使我发出repaint 。 因此,组件将在其边界外部绘制,这是可以理解的不合需要的。 所以,我想知道:如何让组件专门在自定义边框内绘制? 我考虑的一种方法是在paintComponent方法中获取组件的Border对象。 然后将此对象转换为适当的类,其中我定义将影响剪辑的参数。 但这似乎不是一个“声音”设计。 编辑 – import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.RenderingHints; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.border.AbstractBorder; class JRoundedCornerBorder extends AbstractBorder { private static final long serialVersionUID = 7644739936531926341L; private static final int […]

退出Swing应用程序时偶尔会出现InterruptedException

我最近将我的计算机更新为更强大的计算机,配备了四核超线程处理器(i7),因此可以提供大量真正的并发性。 现在我在退出( System.exit(0) )我正在开发的应用程序(使用Swing GUI)时偶尔会出现以下错误: Exception while removing reference: java.lang.InterruptedException java.lang.InterruptedException at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at sun.java2d.Disposer.run(Disposer.java:125) at java.lang.Thread.run(Thread.java:619) 好吧,鉴于它开始发生在具有更多并发能力的硬件上,并且它与线程有关,并且它偶尔发生,它显然是某种时间性的东西。 但问题是堆栈跟踪太短了。 我只有上面的列表。 它根本不包含我自己的代码,因此有点难以猜测bug的位置。 以前有没有经历过这样的事情? 任何想法如何开始解决它? 编辑:因为退出使用System.exit(0)的Swing应用程序可能是“不干净”,但我不想将主框架设置为EXIT_ON_CLOSE因为我想确保在应用程序退出时没有任何关键问题,我添加了一个机制,以便在调用System.exit(0)之前执行主框架的dispose()方法。 所以它现在应该很干净,但偶尔也会发生exception。 它发生在调用System.exit(0)之后; dispose()没有问题。 也就是说,它必须来自一个关闭钩子: mainFrame.dispose(); // No problem! After this returns, all visible GUI is gone. // In fact, if there were no other threads around, […]

如何使用Graphics对象绘制透明形状?

我想在具有透明背景的BufferedImage创建一个“环”。 我可以用这样的透明背景绘制圆圈: BufferedImage bi = new BufferedImage(d, d, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) bi.getGraphics(); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(c); g.fillOval(0, 0, d, d); 但是现在我想在它的中间绘制一个较小的透明圆圈来制作一个圆环(所以当我在另一个图像上绘制这个图像时,环形周围和内部的像素都不会被绘制)。 我想使用Graphics对象来执行此操作,以便我可以使用抗锯齿。 这可能吗? 如果不是,那么解决这个问题的最佳方法是什么?

在JFrame Java中闪烁

大家好我正在做一个线程来更新JFrame上的球,所以我重新绘制屏幕……然后将球更新到它的位置……然后再次绘制屏幕……画出球和同样的周期……这是代码 private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { Thread t = new Thread() { public void run() { while(true) { repaint(); b2.update(ob,2); b2.paint(ob.getGraphics()); b2.setT(b2.getT() + 1); try { Thread.sleep(50); } catch (InterruptedException ex) { System.out.println(“Error in Sleeping”); } } } }; t.start(); } 但问题是我没有看到球…屏幕的油漆总是覆盖球,而球就像是在Jframe下面。