I'm writing a plugin, in java (i.e., NOT a macro), and feel the need to
display results (for now, several sets of points - later, perhaps several polylines) as an overlay. I prefer not to munge the underlying image. Google tells me that someone implemented "ImageCanvasWithOverlay" about a year ago. But, I also see references to "Overlay" in the ImageJ documentation, and a flurry of changes (as recent as 1 June) that seem to be related to overlays. From what I can gather, this overlay feature is closely coupled with ROI's. It's not entirely clear to me that my point sets are "ROIs" - perhaps I'm confused about that? I checked the Examples, and found a *macro* that uses the ROI manager to create an overlay. What I need is an example that does this from a (java) plugin. My target code for this would look something like: createOverlay(); for(int i = 0; i < numPointSets; i++) { setColor(color[i]); for(int p = 0; p < numPoints[i]; p++) plotPoint(points[i][p]; } showOverlay(); Bottom line: I want to display several collections of POINTS (perhaps later POLYLINES) as an overlay. Perhaps I need a good "plugin developers' reference manual"? Feel free to point me at one...please! My profound apologies if such a thing exists in plain sight and I've simply missed it. -- Kenneth Sloan [hidden email] |
Hi Kenneth,
probably the easiest would be to create a Roi, e.g., Roi roi = new PolygonRoi(xPoints, yPoints, nPoints, Roi.POLYGON); where xPoints and yPoints are int arrays of the x and y coordinates, and then use the setOverlay ImagePlus method imp.setOverlay(roi, strokeColor, strokeWidth, fillColor) Michael ________________________________________________________________ On 1 Jul 2010, at 18:04, Kenneth Sloan wrote: > I'm writing a plugin, in java (i.e., NOT a macro), and feel the > need to > display results (for now, several sets of points - later, perhaps > several > polylines) as an overlay. I prefer not to munge the underlying image. > > Google tells me that someone implemented "ImageCanvasWithOverlay" > about a year ago. > > But, I also see references to "Overlay" in the ImageJ > documentation, and a flurry of > changes (as recent as 1 June) that seem to be related to overlays. > From what I can > gather, this overlay feature is closely coupled with ROI's. It's > not entirely clear to me > that my point sets are "ROIs" - perhaps I'm confused about that? > > I checked the Examples, and found a *macro* that uses the ROI > manager to create an overlay. > What I need is an example that does this from a (java) plugin. > > My target code for this would look something like: > > createOverlay(); > for(int i = 0; i < numPointSets; i++) > { > setColor(color[i]); > for(int p = 0; p < numPoints[i]; p++) > plotPoint(points[i][p]; > } > showOverlay(); > > Bottom line: I want to display several collections of POINTS > (perhaps later POLYLINES) as > an overlay. > > Perhaps I need a good "plugin developers' reference manual"? Feel > free to point me at one...please! > My profound apologies if such a thing exists in plain sight and > I've simply missed it. > > -- > Kenneth Sloan > [hidden email] |
In reply to this post by Kenneth Sloan
On Jul 1, 2010, at 12:04 PM, Kenneth Sloan wrote:
> I'm writing a plugin, in java (i.e., NOT a macro), and feel the need to > display results (for now, several sets of points - later, perhaps several > polylines) as an overlay. I prefer not to munge the underlying image. > > Google tells me that someone implemented "ImageCanvasWithOverlay" about a year ago. > > But, I also see references to "Overlay" in the ImageJ documentation, and a flurry of > changes (as recent as 1 June) that seem to be related to overlays. From what I can > gather, this overlay feature is closely coupled with ROI's. It's not entirely clear to me > that my point sets are "ROIs" - perhaps I'm confused about that? > > I checked the Examples, and found a *macro* that uses the ROI manager to create an overlay. > What I need is an example that does this from a (java) plugin. > > My target code for this would look something like: > > createOverlay(); > for(int i = 0; i < numPointSets; i++) > { > setColor(color[i]); > for(int p = 0; p < numPoints[i]; p++) > plotPoint(points[i][p]; > } > showOverlay(); > > Bottom line: I want to display several collections of POINTS (perhaps later POLYLINES) as > an overlay. > > Perhaps I need a good "plugin developers' reference manual"? Feel free to point me at one...please! > My profound apologies if such a thing exists in plain sight and I've simply missed it. An overlay is just a list of one or more ROIs that is non-destructively displayed on an image. To display a collection of points you can create a PointRoi (a multi-point selection) and display it as an overlay. Or create a ShapeRoi containing custom points and display it as an overlay. Here is an example plugin that does both. -wayne import ij.*; import ij.gui.*; import java.awt.*; import java.util.Random; import ij.plugin.*; import java.awt.geom.*; public class Overlay_Points implements PlugIn { public void run(String arg) { ImagePlus imp = IJ.getImage(); int n = 100; int[] xpoints = new int[n]; int[] ypoints = new int[n]; Random ran = new Random(); for (int i=0; i<n; i++) { xpoints[i] = (int)(ran.nextDouble()*imp.getWidth()); ypoints[i] = (int)(ran.nextDouble()*imp.getWidth()); } Roi roi = new PointRoi(xpoints, ypoints, n); roi.setStrokeColor(Color.red); Overlay overlay = new Overlay(roi); imp.setOverlay(overlay); IJ.wait(4000); int size = 10; int lineWidth = 3; GeneralPath path = new GeneralPath(); for (int i=0; i<n; i++) { path.moveTo(xpoints[i]-size,ypoints[i]); path.lineTo(xpoints[i]+size,ypoints[i]); path.moveTo(xpoints[i],ypoints[i]-size); path.lineTo(xpoints[i],ypoints[i]+size); } roi = new ShapeRoi(path); roi.setStrokeColor(Color.blue); roi.setStrokeWidth(lineWidth); overlay = new Overlay(roi); imp.setOverlay(overlay); } } |
Free forum by Nabble | Edit this page |