import java.awt.image.BufferedImage;
import java.io.*;
+import java.util.List;
import java.util.logging.Level;
import org.eclipse.swt.program.Program;
public void run() {
SegmentationContext ctx = window.getContext();
-
+ List<SegmentationMask> masks = ctx.getSegmentationMasks();
if (ctx.hasSegmentationMasks()) {
// Get options from user
// Grab image and mask
- for (SegmentationMask mask : ctx.getSegmentationMasks())
- {
BufferedImage image = ImageConverter.convert(ctx.getImageData());
// Setup exporter
- Exporter exporter = new Exporter(image, mask);
+ Exporter exporter = new Exporter(image, masks);
exporter.setEffect(result.effect);
exporter.setHtmlFile(result.html);
exporter.setImageFile(result.image);
// Export
try {
- exporter.export(result.folder, mask.layerNumber);
+ exporter.export(result.folder,masks);
} catch (IOException e) {
handleError(e);
return;
handleError(e);
return;
}
- }
// for opening the image after saving as ImageMap
if (result.open) {
File file = new File(result.folder, result.html);
* @author Kevin McGuinness
*/
public class Exporter {
- private final SegmentationMask mask;
+// private final List<SegmentationMask> masks;
private final BufferedImage image;
private RolloverEffect effect;
private String title = "";
private AreaShape exportShape = AreaShape.Polygon;
- public Exporter(BufferedImage image, SegmentationMask mask) {
+ public Exporter(BufferedImage image, List<SegmentationMask> masks) {
this.image = image;
- this.mask = mask;
+ // this.masks = masks;
}
public RolloverEffect getEffect() {
this.exportShape = shape;
}
- public void export(File folder, int layerNumber) throws IOException, ExportException {
- ContourTracer tracer = new ContourTracer(mask, SegmentationMask.FOREGROUND);
- List<Polygon> trace = tracer.trace();
-
- if (trace.size() == 0) {
- throw new ExportException("No objects found");
- }
-
- List<String> preloads = getPreloads(trace,layerNumber);
-
- // Write image
- ImageIO.write(image, "png", new File(folder, imageFile));
-
- if (effect != null) {
- int i = 1;
-
- // Generate effect images
- for (Polygon object : trace) {
- RenderedImage im = effect.createEffect(image, object);
- File output = new File(folder, preloads.get(i++));
- ImageIO.write(im, "png", output);
- }
- }
+ public void export(File folder, List<SegmentationMask> masks) throws IOException, ExportException {
// Create image map
ImageMap map = new ImageMap();
map.setImageHref(imageFile);
map.setImageName(imageName);
- // Add javascript preloads
- for (String str : preloads) {
- map.addPreload(str);
- }
-
- // Add areas
- int idx = 1;
- for (Polygon polygon : trace) {
- MapArea area = new MapArea();
- switch (exportShape) {
- case Polygon:
- area.setPolygon(polygon);
- break;
- case Rectangle:
- area.setRect(polygon.getBounds());
- break;
- case Circle:
- // TODO: Implement circle!
+ List<String> preloads = new ArrayList<String>();
+ map.addPreload(imageFile);
+ for(SegmentationMask mask : masks)
+ {
+ ContourTracer tracer = new ContourTracer(mask, SegmentationMask.FOREGROUND);
+ List<Polygon> trace = tracer.trace();
+
+ if (trace.size() == 0) {
+ throw new ExportException("No objects found");
+ }
+ preloads.clear();
+ preloads.add(getPreloads(trace, mask.layerNumber).get(0));
+ // Write image
+ ImageIO.write(image, "png", new File(folder, imageFile));
+
+ if (effect != null) {
+ int i = 0;
- default:
- area.setPolygon(polygon);
- break;
+ // Generate effect images
+ for (Polygon object : trace) {
+ RenderedImage im = effect.createEffect(image, object);
+ // '0' for Rollover effect
+ File output = new File(folder, preloads.get(0));
+ ImageIO.write(im, "png", output);
+ }
}
- area.setAlt(objectDescription);
- area.setHref(objectLink);
+ // Add javascript preloads
+ for (String str : preloads) {
+ map.addPreload(str);
+ }
- if (effect != null) {
+ // Add areas
+ for (Polygon polygon : trace) {
+ MapArea area = new MapArea();
+ switch (exportShape) {
+ case Polygon:
+ area.setPolygon(polygon);
+ break;
+ case Rectangle:
+ area.setRect(polygon.getBounds());
+ break;
+ case Circle:
+ // TODO: Implement circle!
+
+ default:
+ area.setPolygon(polygon);
+ break;
+ }
+
+ area.setAlt(objectDescription);
+ area.setHref(objectLink);
+ if (effect != null) {
+
+
+ area.addAttr("onmouseover",
+ String.format("rollover(document.%s, image%s)",
+ imageName, mask.layerNumber));
+ area.addAttr("onmouseout",
+ String.format("rollover(document.%s, image0)", imageName));
+ area.addAttr("title",mask.segmentName);
+ }
- area.addAttr("onmouseover",
- String.format("rollover(document.%s, image%s)",
- imageName, idx++));
- area.addAttr("onmouseout",
- String.format("rollover(document.%s, image0)", imageName));
- area.addAttr("title",getTitle());
+ map.addArea(area);
}
- map.addArea(area);
+ map.exportToFile(new File(folder, htmlFile));
}
-
- map.exportToFile(new File(folder, layerNumber+htmlFile));
}
private List<String> getPreloads(List<Polygon> trace, int layerNumber) {
List<String> preloads = new ArrayList<String>();
- preloads.add(imageFile);
if (effect != null) {
preloads.add(filename);
}
}
-
return preloads;
}
}