Tag: 变换

java移动旋转的形状

我正在实现一个java swing应用程序,它有一个JPanel作为绘图表面。 表面渲染(活动)不同的元素。 每个元素都有自己的形状和仿射变换,用于渲染和碰撞检测(每个元素用局部坐标绘制,然后用仿射变换转换 – 如opengl)。 可以在表面上移动和旋转元素(这通过变换完成)。 每次应用变换时,都会使用形状和变换创建Area对象(用于准确的碰撞检测)。 问题是当我旋转元素(45度)然后移动10像素。 当我移动它时,元素沿着我不想要的旋转方向移动。 有什么简单的方法可以解决这个问题吗? (如果我的描述不够,我会发布一些示例代码)。 编辑: class Element { private AffineTransform transform = new AffineTransform(); private Shape shape = new Rectangle(0,0,100,100); private Area boundingBox; public void onMouseDrag(MouseEvent e) { translate(dx,dy); // dx,dy are calculated from event } public void onMouseMove(MouseEvent e) { rotate(Math.atan2(dx/dy); // dx,dy are calculated from […]

onPictureTaken()出错,问题是无法将RGB转换为GRAY,程序停止从cvtcolor()函数运行。

嘿家伙我这个function遇到麻烦,这个function在拍照后调用,现在我想使用图像数据进行距离变换。 并计算我知道哪里有问题的对象的确切数量,但我无法解决它,我认为问题是在Imgproc.cvtColor(m,mGray,Imgproc.COLOR_BGRA2GRAY)当我调试程序停止运行此时所以请回答我,如果你找到了什么; 先感谢您 @Override public void onPictureTaken(byte[] data, Camera camera) { Log.i(TAG, “Divyesh Saving a bitmap to file”); // The camera preview was automatically stopped. Start it again. mCamera.startPreview(); Log.i(TAG, “Divyesh Start preview”); mCamera.setPreviewCallback(this); Log.i(TAG, “Divyesh Start preview callback”); // Write the image in a file (in jpeg format) try { FileOutputStream fos = new […]

在Processing中从相对世界空间转换

将局部相对点转换为处理中的世界(屏幕)空间有什么好方法? 例如,采用Processing PDE附带的Flocking示例 。 我如何在Boid类中实现relativeToWorld方法和worldToRelative方法。 这些方法将考虑所有变换在render方法中完成。 我以为我想要转换PVector对象,所以方法签名可能类似于: PVector relativeToWorld(PVector relative) { // Take a relative PVector and return a world PVector. } PVector worldToRelative(PVector world) { // Take a world PVector and return a relative PVector. }

从内存中获取Java类字节码(多次转换后)

我正在为Minecraft开发一个coremod,并在加载时转换很多类。 然而问题是有多个coremod也会改变我所使用的相同类,并且我得到了一些我想要研究的奇怪行为。 然后是问题,如何在多次转换后检查字节码? 当我转换它时,我只得到一个byte []输入,我通过ASM运行然后返回我修改的字节码。 我的想法是在加载类之后将类字节码转储到.class文件,并从那里检查它。 但是在加载类之后,我似乎无法找到任何实际获取字节码的方法。 我能找到的最接近的是getResource,但它返回字节码,因为它是在转换之前,而不是我想要的。 TLDR:如何在修改和加载类之后获取类的字节码? – 不要使用ClassLoader.getResource,因为它返回未修改的版本。 – 在加载时没有得到它,因为我想捕捉自己之后发生的变换。 是否有一些外部程序可以转储内存中的字节码或什么? 希望有人能帮我这个=)

转换Rectangle2D java

我试图通过特定的theta旋转Rectangle2D对象。 但是我不能这样做,因为Rectangle2D的方法转换(AffineTransform)是未定义的。 有关如何做到这一点的任何想法? 谢谢。 Rectangle2D.Double currentVehic = new Rectangle2D.Double(bottomLeft[0], bottomLeft[1],vehicWidth, vehicHeight); // Rotate the vehicle perimeter about its center AffineTransform rotate = new AffineTransform(); //Rectangle2D rotatedVehic = AffineTransform.getRotateInstance(theta,x,y); rotate.setToRotation(theta, x, y); currentVehic.transform(rotate); return currentVehic;

Java Advanced Imaging API中的Fast Perspective转换

为了我的程序的需要,我创建了一个设备来扭曲图像并将其放在地图上(我的程序是基于地图的程序)。 我编写了自己的机制,使用放置在图像上的三个点放置和扭曲图像,放置在地图上的三个点,然后我只是创建一个AffineTransform,将第一个三角形转换为第二个,实际上将图像准确放置在我想要的位置并进行转换以适合用户的需求。 问题是,使用AffineTransforms,您只能执行最基本的转换。 您可以翻译,旋转,缩放和倾斜图像。 这对于大多数情况来说已经足够了,但我最近想要实现类似于Photoshop的自由变换的4点变换。 我做了一些研究,发现了JAI的Perspective变换,在WarpPerspective的帮助下,我可以实现我想要的。 我最初有一个问题,即变换图像的结果背景是透明的,但我也找到了解决方案。 这是我的代码: package com.hampton.utils; import java.awt.Dimension; import java.awt.RenderingHints; import java.awt.Transparency; import java.awt.color.ColorSpace; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; import java.awt.image.SampleModel; import java.awt.image.renderable.ParameterBlock; import javax.media.jai.ImageLayout; import javax.media.jai.Interpolation; import javax.media.jai.JAI; import javax.media.jai.PerspectiveTransform; import javax.media.jai.PlanarImage; import javax.media.jai.RasterFactory; import javax.media.jai.RenderedOp; import javax.media.jai.WarpPerspective; import javax.media.jai.operator.CompositeDescriptor; /** * @author Savvas Dalkitsis */ public class PerspectiveTransformation { public […]

Java图像转换

我需要为我的图像创建3D深度效果。 数字1是我所拥有的,数字2是我希望转换为数字1的形状。那么在Java标准图形库或其他一些开源库中是否有任何方法? 替代文字http://sofzh.miximages.com/java/27y8ntj.png

旋转BufferedImage时如何产生清晰的绘画效果?

一种尝试的方法是使用TexturePaint和g.fillRect()来绘制图像。 然而,这需要您在每次绘制图像时创建一个新的TexturePaint和Rectangle2D对象,这是不理想的 – 并且无论如何都没有帮助。 当我使用g.drawImage(BufferedImage,…) ,旋转的图像看起来模糊/柔和。 我熟悉RenderingHints和双缓冲(我认为这就是我正在做的事情),我发现很难相信你不能轻易有效地在Java中旋转产生尖锐结果的图像。 使用TexturePaint代码看起来像这样。 Grahics2D g2d = (Graphics2D)g; g2d.setPaint(new TexturePaint(bufferedImage, new Rectangle2D.Float(0,0,50,50))); g2d.fillRect(0,0,50,50); 我正在使用AffineTransform将一手牌旋转成一个风扇。 什么是快速绘制好看图像的最佳方法? 这是一个截图: 9是清脆的,但其余的卡肯定不那么尖锐。 问题可能出在我创建每张卡片图像并将其存储在数组中时。 这就是我现在正在做的事情: // i from 0 to 52, card codes. … GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gs = ge.getDefaultScreenDevice(); GraphicsConfiguration gc = gs.getDefaultConfiguration(); BufferedImage img = gc.createCompatibleImage(86, 126, Transparency.TRANSLUCENT); Graphics2D g = img.createGraphics(); setRenderingHints(g); […]

围绕x轴垂直旋转形状

我有一个带有x和y轴的2d图形,我试图围绕轴旋转一个形状(一系列点)。 此旋转需要包括缩放function。 import java.awt.*; import java.awt.event.*; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import javax.swing.*; import java.lang.reflect.Array; public class test extends JPanel implements ActionListener { int[] p1x = {200, 200, 240, 240, 220, 220, 200}; int[] p1y = {200, 260, 260, 240, 240, 200, 200}; int[] p2x = {600, 600, 620, 620, 640, 640, 660, 660, 600}; int[] […]