Changelistener for BufferedImage

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.drawLine或者buffimage.setRGB(x,y,rgb);,那么pixelchange(e)应该会触发。
有没有一种方法可以实现这个功能呢? :)
2个回答

3

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


谢谢您的回复 :) 不幸的是,它只追踪setRGB()。我不知道为什么,但图形方法不使用setRGB()进行渲染。我是否还需要扩展Graphics? - tly
不,你不必这样做。 - Dan D.

0

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


不是 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接