我正在开发一个“绘图”应用程序。整个“绘图”始终存储在 BufferedImage 对象中(使用恒定更新循环)。我们称之为drawingArea
。
我正在使用 BufferedImage
类的 getSubimage()
方法实现一个选择工具。用户使用此工具选择绘图的区域,并将其粘贴到绘图上的任意位置。
用户通过拖动鼠标选择一个区域,当他/她释放鼠标时,所选区域将存储在BufferedImage
中。这是通过调用 drawingArea
的 getSubimage(/* 所选矩形区域的属性 */)
方法并将返回值放入该 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/