当前位置: 首页 > 知识库问答 >
问题:

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

戚成礼
2023-03-14

我需要将已经制作好的BufferedImage移动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);

使用此代码然后只绘制少数元素而不是从头开始制作整个图像在性能上并没有太大的飞跃,所以我认为制作新的BufferedImage然后在其上绘制图像不是最好的方法。我宁愿从已经制作的图像创建Graphics2D对象,然后将其对角线移动几个像素,但我找不到这样做的方法

共有1个答案

聂鹏云
2023-03-14

从Graphics2d文档中使用翻译:

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

您正在定义影响未来操作的转换。在调用转换后,如果您要在图形上调用方法,例如绘图3DRect(0,0,...剪切...),起始坐标0,0将由x, y翻译。

我认为您最好的选择可能是在获得图形对象之前使用BufferedImage的方法来移动所有像素。你有getRgb和setRgb

移动像素的简单示例:

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,分块获取和设置。

 类似资料:
  • 问题内容: 是否可以使用给定的坐标来模拟网页中JavaScript的点击? 问题答案: 您可以调度 点击 事件,尽管这与实际点击不同。例如,它不能用于欺骗跨域iframe文档以使其被点击。 所有现代浏览器都支持和,因为至少IE 6,火狐5,Chrome浏览器和Safari的你很可能任何版本可能任何版本的关心。它甚至会点击链接并提交表格:

  • 我有一个堆叠的条形图。我想画一条线,就像对堆叠的条形图的几个条形进行分组一样。 一些人请帮助绘制这些线使用D3。 JS:

  • 问题内容: 有什么方法可以检查PNG图像的选定点(x,y)是否透明? 问题答案: 基于Jeff的答案,您的第一步将是创建PNG的画布表示。以下内容将创建一个屏幕外画布,该画布的宽度和高度与您的图像相同,并在其上绘制图像。 之后,当用户单击时,使用和获取位置。然后可以用来获取像素: 因为您只抓取一个像素,所以pixelData是一个包含四个像素的R,G,B和A值的四项数组。对于Alpha,任何小于2

  • 我试图画一系列给定坐标的矩形,这只是一个x和y值的列表。 这是我的密码: 此代码应绘制类似以下内容的形状: 相反,它画的东西没有连贯的形状。