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,交叉发布此问题的地方。
在我的 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,交叉发布此问题的地方。