3

有没有办法跟踪 BufferdImage 的像素数据的变化?我在想这样的事情:

PixelChangeListener listener = new PixelChangeListener() {
public void pixelchange(Event e) {
    // Get the coordinates in the Image that have been changed:
    int x=e.getX();
    int y=e.getY();
}
};
buffimage.addPixelChangeListener(listener);

如果我现在使用g.drawLinebuffimage.setRGB(x,y,rgb); pixelchange(e)应该开火。
有没有办法做到这一点?:)

4

2 回答 2

3

没有这样的听众。但是您可以扩展BufferedImage和添加您需要的 API。

于 2013-04-10T14:35:10.140 回答
0

这是 OP 的解决方案(最初发布在问题中)。


不是 BufferedImage 本身,而是它背后的 WritableRaster 必须修改。您可以使用sun.awt.image.SunWritableRaster它,只需使用该notifychanged() 方法来跟踪像素变化。为了使用 Raster 获得正确的 BufferedImage,我使用了以下代码:

ColorModel colormodel=ColorModel.getRGBdefault();
WritableRaster temp=colormodel.createCompatibleWritableRaster(400,400);
SunWritableRaster raster=new SunWritableRaster(temp.getSampleModel(),temp.getDataBuffer(),new Point(0,0));
BufferedImage img=new BufferedImage(colormodel,raster,true,null);
于 2015-04-29T17:24:12.153 回答