Tag: java 2d

是否有100%的Java替代ImageIO来读取JPEG文件?

我们正在使用Java2D来调整上传到我们网站的照片的大小,但是我们遇到了一个问题(一个看似旧的问题,参见: http : //forums.sun.com/thread.jspa?threadID = 5425569 ) – 一些特殊的JPEG当我们尝试ImageIO.read()包含其二进制数据的InputStream时,引发CMMException : java.awt.color.CMMException: Invalid image format at sun.awt.color.CMM.checkStatus(CMM.java:131) at sun.awt.color.ICC_Transform.(ICC_Transform.java:89) at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:516) at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082) at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897) at javax.imageio.ImageIO.read(ImageIO.java:1422) at javax.imageio.ImageIO.read(ImageIO.java:1326) … (剪断了堆栈跟踪的剩余部分,这是我们的ImageIO.read()调用,servlet代码等) 我们将其缩小到特定相机拍摄的照片,然后我选择了一张触发此错误的照片: http : //img214.imageshack.us/img214/5121/estacaosp.jpg 。 我们注意到这只发生在Sun的JVM上(在Linux和Mac上,只是在1.6.0_20上测试过) – 一台带有OpenJDK的测试机器可以顺利读取相同的照片,这可能是由于JPEG阅读器的不同实现。 不幸的是,我们无法在生产中切换JVM,也无法使用ImageMagick( http://www.imagemagick.org/ )等本机相关解决方案。 考虑到这一点,我的问题是:是否存在替代可以处理链接照片之类的照片的ImageIO JPEG读取器? 如果没有,我们可以使用另一个100%纯Java照片大小调整解决方案吗? 谢谢!

用红色掩码创建的java缓冲图像

我在阅读图像时遇到问题。 如果我做以下事情 URL url = new URL(“http://sofzh.miximages.com/java/gmm.jpg”); ImageInputStream stream = ImageIO.createImageInputStream(url.openStream()); ImageReader reader = ImageIO.getImageReaders(stream).next(); reader.setInput(stream, true, true); BufferedImage image = reader.read(0); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageWriter writer = ImageIO.getImageWritersByFormatName(“JPEG”).next(); ImageOutputStream ios = ImageIO.createImageOutputStream(bos); writer.setOutput(ios); IIOImage ioImage = new IIOImage(image, null, null); writer.write(ioImage); ios.close(); FileOutputStream fos = new FileOutputStream(“badimage.jpeg”); fos.write(bos.toByteArray()); fos.close(); 图像用红色调写成。 是否有一些选项需要设置才能正确读取此图像?

需要Line2D装饰技巧 – Graphics2D

我通过Graphics2D绘图在我的JPanel上放置了Line2D和Arc2D对象。 您可以在这个问题“ 如何使像素完美的Line2D – Graphics2D ”中看到它的一部分。 现在我想要实现的是,我想为所有Line2D和Arc2D对象创建两条平行线和弧。 在视觉上, 目前正常绘制Line2D和Arc2D, 想要像这样装饰它, 到目前为止我的想法, 我或许可以通过创建两条不同的线并从我的法线位置给出偏移+间隙和-gap来实现这一点。 然而,这将产生许多我不想要的对象。 现在,是否有可能使我的正常线条像这样厚, 并给它们一个边框并从中删除中间位? 是否有可能实现这一目标? 如果有,我可以请一些指示。 谢谢你的帮助。

如何将Java 2D Shape对象序列化为XML?

Shape接口由Java 2D( Arc2D , Area , CubicCurve2D , Ellipse2D , GeneralPath等)的对象实现。 一些具体对象标记为Serializable ,可以使用对象序列化进行存储和恢复,但像Area这样的其他对象不实现接口并抛出错误。 但是,由于我们经常被警告说这种天真的序列化在Java实现或版本中不一定是稳定的,我更喜欢使用某种forms的序列化。 这导致我们使用XMLEncoder和XMLDecoder从XML存储/恢复,但是它能够处理更少的Java 2D Shape对象。 两者的一些结果可以在下面看到。 我们从6个形状开始,尝试通过对象序列化和标准XML序列化来存储/恢复它们。 我们如何通过XML正确存储所有Shape对象? import java.awt.*; import java.awt.geom.*; import java.awt.image.BufferedImage; import java.beans.*; import java.io.*; import java.util.ArrayList; import javax.swing.*; import javax.swing.border.TitledBorder; public class Serialize2D { private JPanel ui; Serialize2D() { initUI(); } public void initUI() { if (ui != null) […]

Java 2D中的可拖动矩形

可能重复: 如何拖动对象 我需要使用Java 2D绘制一些UML组件(类,包等),然后能够拖动它们。 有没有办法做到这一点? 我的意思是,要使形状“可拖动”?

获得动态形状的鼠标检测

基本上我正在构建一张世界地图。 我知道如何有一个方形点击区域。 但是我想这样做,这样我就可以将这些国家放在一起,并能够点击这个国家。 现在很明显我不能使用方形点击区域,因为我有点重叠区域。 我可以通过查看每个像素的透明度来做到这一点吗? 即便如此,我不知道该怎么做?

如何在Java中绘制有向箭头线?

我想在Java中绘制一条有向箭头线。 目前,我正在使用java.awt.Line2D.Double类来绘制一条线 g2.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); // g2 is an instance of Graphics2D g2.draw(new Line2D.Double(x1,y1,x2,y2)); 但只显示该行,并且不显示有向箭头。 BasicStroke.Join_BEVEL用于绘制有向箭头。 当两个线段相遇时应用它。 我绘制的线条符合矩形的边框,但没有绘制有向箭头。 只绘制一条简单的线条。 有什么我想念的吗?

吃豆子打开/关闭嘴动画

我想用最简单的方法制作pacman开/关嘴动画。 这是我最近的代码:问题是,什么都没发生? package ordner; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class PacMan implements ActionListener { private JFrame frame; private DrawPanel panel; private void initGui() { frame = new JFrame(“Pacman”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel = new DrawPanel(); frame.add(panel); panel.setBackground(Color.BLACK); frame.setSize(300, 300); frame.setVisible(true); } public static void main(String[] args) { PacMan pm = new […]

setOpaque(真/假); Java的

在Java2D中,当你使用setOpaque时,我对true和false的作用有点困惑。 例如,我知道在Swing Opaque中意味着在绘制Swing时不会绘制组件背后的内容。 或者这是倒退? 哪一个? 谢谢

如何正确对齐此文本?

我今天写了这个极地时钟,我几乎完成了我想要将我的文字对齐在类似于此的行内。 有谁知道如何做到这一点? 我曾尝试使用FontRenderContext和字体指标,但我似乎无法让它工作。 这是完整的源代码,因此您可以编译它并自己查看。 import java.applet.Applet; import java.awt.AWTEvent; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Shape; import java.awt.Toolkit; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; import java.awt.geom.AffineTransform; import java.awt.geom.Arc2D; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.util.Calendar; import java.util.TimeZone; public class Clock extends Applet implements Runnable { int[][] colorsInt = {{20,20,20},{100,100,50},{50,100,100},{10,170,50},{79,29,245},{24,69,234},{253,24,103}}; Color[] […]