2013-04-10 53 views
3

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

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)应该火。
有没有办法做到这一点? :)

回答

3

有没有这样一个听众。但是你可以扩展BufferedImage并添加你需要的API。

+0

感谢您的答复:)遗憾的是它仅跟踪'setRGB()'。我不知道为什么,但图形方法不使用'setRGB()'来渲染。我是否也必须扩展'Graphics'? – tly 2013-04-10 15:07:35

+0

不,你不必这样做。 – 2013-04-10 15:14:47

+0

问题解决:)(见上文) – tly 2013-04-10 16:44:55

0

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


不是BufferedImage本身,而是它后面的WritableRaster必须修改。 您可以使用 sun.awt.image.SunWritableRaster,只需使用 notifychanged() 方法来跟踪像素变化。 为了获得与栅格我用这个代码适当的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);