ImageJ:如何让 GenericDialog 中的图像重新绘制?

ImageJ: how to get Image inside GenericDialog to repaint?

在我的 ImageJ 插件中,我显示了一个 GenericDialog,它附有一堆图像,如下所示:

// global:
ColorProcessor cp = new ColorProcessor(50, 50); // new ColorProcessor
ImagePlus ip;

public void run(ImageProcessor ip) {
  GenericDialog gdiag = new GenericDialog("Foo"); // new Dialolg

  gdiag.addDialogListener(this); // adding Listener
  gdiag.addMessage("Lorem Ipsum"); // adding Message
  gdiag.addSlider("Bar", 1, 360, 1); // adding Slider

  Color c = new Color(r, g, b);
  cp.setColor(tarColor);
  cp.fill();
  ip = new ImagePlus("fooimg", cp);

  gdiag.addImage(ip);
  gdiag.showDialog();
}

我保留了对 Colorprocessor 和 ImagePlus 的引用。当滑块在 GenericDialog 上移动时,我的 dialogItemChanged() 事件将触发。在这里,我更改了图像上的颜色:

public boolean dialogItemChanged(GenericDialog gd, AWTEvent event) {
  float fooVal = (float) ((Scrollbar)(gd.getSliders().get(0))).getValue();

  // calculating color based on fooVal ...

  Color selColor = new Color(r, g, b);
  cp.setColor(selColor);
  cp.fill();
}

现在当我运行这个时,图像中的颜色不会更新。只有当我更改对话框的大小并将边框移动到图像上时,颜色才能正确显示。

如何强制重绘对话框?

我尝试了很多不同的更新和重绘,我没有选择。

Wayne Rasband 在 ImageJ 的 1.51b12 每日构建中添加了此功能;请参阅 his response on the ImageJ mailing list,交叉发布此问题的地方。