2013-04-10 40 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);