java - BufferedImage 的 getSubimage() 到底做了什么?

标签 java drawing bufferedimage

我正在开发一个“绘图”应用程序。整个“绘图”始终存储在 BufferedImage 对象中(使用恒定更新循环)。我们称之为drawingArea

我正在使用 BufferedImage 类的 getSubimage() 方法实现一个选择工具。用户使用此工具选择绘图的区域,并将其粘贴到绘图上的任意位置。

用户通过拖动鼠标选择一个区域,当他/她释放鼠标时,所选区域将存储在BufferedImage中。这是通过调用 drawingAreagetSubimage(/* 所选矩形区域的属性 */) 方法并将返回值放入该 BufferedImage(我们称之为 selectedArea)。

此操作仅执行一次(又名,一旦selectedArea内有一个值,就没有任何代码将任何新内容分配给选定区域)。

但是,我发现(并且确信这一点),存储在 selectedArea 中的值确实发生了变化 - 它存储的图像会更新!

含义:如果用户选择一个区域(此时保存的是该区域的副本图像),然后会在该区域内绘制一些内容,并且然后粘贴图片 - 粘贴的图片将是绘图之后的图片,而不是之前的图片。

怎么会这样呢? getSubimage() 是否返回一个 BufferedImage,当它的原点更新时,它也会更新? (又名它被复制的区域)? 这看起来很愚蠢,但在我看来,这是唯一的选择。

最佳答案

如有疑问,请查看文档:

Returns a subimage defined by a specified rectangular region. The returned BufferedImage shares the same data array as the original image.

换句话说,是的,原始图像或子图像中的修改可以在另一个图像中看到。

关于java - BufferedImage 的 getSubimage() 到底做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133993/

相关文章:

java - 如何从 JTextArea 创建公共(public)字符串?

java - 寻找与数据库设计相关的方式

c# - c# 的图形查看器/抽屉?

java - 为什么我的构造函数出现非静态变量错误?

java - 如何通过 Java 获取系统/硬件信息?

iphone - 在 Objective-c 中画圆

android - canvas.drawCircle 不起作用 - 而 drawLine 起作用 - 可能是由使用 Sherlock 引起的?

java - Java 中的 BufferedImage 是否有与 MapRGB 等价的东西?

java - 在 .jar 中加载 BufferedImage

Java 在 Windows 上读取文件非常慢