【发布时间】:2018-03-19 21:40:40
【问题描述】:
我正在使用 16 位灰度图像:
BufferedImage bufferedImage = new BufferedImage(320, 240, BufferedImage.TYPE_USHORT_GRAY);
我可以通过获取对其底层存储的引用来编辑该图像。数据存储在一个线性数组中,按行主要顺序:
short[] data = ((DataBufferUShort)bufferedImage.getRaster().getDataBuffer()).getData();
但是,如果bufferedImage 已被渲染到任何屏幕,编辑data 不再有任何效果。我可以在数据显示在屏幕上之前对其进行编辑,但在显示之后就不能再更改了。
我当然尝试过重新绘制 AWT 控件——它没有使用新的像素数据进行更新。我什至尝试过 getDataElements 和 setDataElements。显示图像后似乎没有任何效果。
【问题讨论】:
-
minimal reproducible example 会有很大帮助。
-
您是否使用新的像素数据更新了 BufferedImage? (即,你有没有在 BufferedImage 上调用
setData(data)) -
@Campbell
getRaster().getDataBuffer()).getData()不返回数据的副本;没有必要打电话给setData。 -
@Mr.史密斯值得一试,不是吗?
标签: java awt bufferedimage