Java 如何通过x,y坐标移动图形2D中的所有内容。

Java 如何通过x,y坐标移动图形2D中的所有内容。,java,image,graphics,bufferedimage,graphics2d,Java,Image,Graphics,Bufferedimage,Graphics2d,我需要移动已经制作好的BuffereImage的x,y坐标,然后用Graphics2D对象在上面画另一个东西。我尝试使用此代码来实现此目的: Graphics2D g = img.createGraphics(); g.translate(x, y); 但它不起作用。是否有任何方法可以移动Graphics2D对象中的所有内容,然后在其上绘制,或者我必须使用以下代码: BufferedImage temp = new BufferedImage(img.getWidth(),img.getH

我需要移动已经制作好的BuffereImage的x,y坐标,然后用Graphics2D对象在上面画另一个东西。我尝试使用此代码来实现此目的:

Graphics2D g = img.createGraphics();
g.translate(x, y);  
但它不起作用。是否有任何方法可以移动Graphics2D对象中的所有内容,然后在其上绘制,或者我必须使用以下代码:

BufferedImage temp = new BufferedImage(img.getWidth(),img.getHeight(),BufferedImage.TYPE_INT_ARGB);
Graphics2D g = temp.createGraphics();
g.drawImage(img,x, y,null);
使用这段代码,然后只绘制几个元素,而不是从头开始绘制整个图像,这在性能上并不是一个很大的飞跃,所以我认为创建新的BuffereImage然后在上面绘制图像不是最好的方法。我宁愿从已经制作好的图像创建Graphics2D对象,然后沿对角线方向移动几个像素,但我找不到这样做的方法。

使用translate时:

在此图形上下文中后续渲染操作中使用的所有坐标都是相对于此新原点的

您正在定义影响未来操作的转换。调用translate后,如果要调用图形上的方法,如
draw3DRect(0,0,…snipped…
,则起始坐标0,0将转换为x,y

我认为最好的办法是使用BuffereImage的方法在获得图形对象之前移动所有像素。你有和

移动像素的简单示例:

BufferedImage buffImg = ImageIO.read(img);
int width = buffImg.getWidth();
int horizontalOffset = 10;
int verticalOffset = 10;
int widthToMove = width - horizontalOffset;
int heightToMove = buffImg.getHeight() - verticalOffset;
int[] rgb = buffImg.getRGB(0, 0, widthToMove, heightToMove, null, 0, widthToMove);
buffImg.setRGB(horizontalOffset,verticalOffset,widthToMove, heightToMove,rgb, 0, widthToMove);
这仍然让你有一些工作要做,因为在顶部和左侧有一个条纹,你需要用背景色填充


如果要在大图像上使用它,您可能需要使用一个缓冲区int[]并将其以循环的形式传递给getRGB,以块的形式获取和设置。

您没有创建临时图像,而是尝试将其绘制到自身上(即使用
img.createGraphics().drawImage(img,x,y,null)
)?在任何情况下,听起来最好保持原始图像不变,并在绘制到屏幕上时进行翻译。但很难说你最终要达到什么目的。:-)