【问题标题】:Changelistener for BufferedImageBufferedImage 的更改侦听器
【发布时间】:2013-04-10 14:32:21
【问题描述】:

有没有办法跟踪 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) 应该会触发。
有没有办法做到这一点? :)

【问题讨论】:

    标签: java graphics bufferedimage changelistener


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复 :) 不幸的是它只跟踪 setRGB() 。我不知道为什么,但图形方法不使用setRGB() 来渲染。我也必须扩展Graphics 吗?
    • 不,你不必那样做。
    【解决方案2】:

    这是来自 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2011-04-26
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多