在我的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();
}
现在,当我运行此图像时,图像中的颜色不会更新。只有当我更改对话框的大小并在图像上移动边框时,颜色才会正确显示。
如何强制对话重绘?
我尝试了很多不同的更新&重新粉刷,我没有选择。
答案 0 :(得分:2)
Wayne Rasband在ImageJ的1.51b12每日版本中增加了这项功能;见his response on the ImageJ mailing list,这个问题是交叉发布的。