Hello!

To see the file structure, click on "tree".

Note that updates take place every 10 minutes, commits may not be seen immediately.
ImageMap functionality for multiple labels. Done by Nikhil.
authorlingutln <lingutln@localhost>
Mon, 30 Jan 2012 00:03:11 +0000 (00:03 +0000)
committerlingutln <lingutln@localhost>
Mon, 30 Jan 2012 00:03:11 +0000 (00:03 +0000)
svn path=/; revision=283

Annotation/src/ie/dcu/apps/ist/actions/ExportImageMapAction.java
Annotation/src/ie/dcu/apps/ist/export/imagemap/Exporter.java
Annotation/src/ie/dcu/apps/ist/export/imagemap/ImageMap.java

index 8b758a3602a4d3c6133f5f379f4e9954c8784fc0..ef8b1f68d0a2f92234e78078ad48b1f57c68103f 100644 (file)
@@ -8,6 +8,7 @@ import ie.dcu.swt.ImageConverter;
 
 import java.awt.image.BufferedImage;
 import java.io.*;
+import java.util.List;
 import java.util.logging.Level;
 
 import org.eclipse.swt.program.Program;
@@ -27,7 +28,7 @@ public class ExportImageMapAction extends AppAction{
        public void run() { 
                
                SegmentationContext ctx = window.getContext();
-               
+               List<SegmentationMask> masks = ctx.getSegmentationMasks();
                if (ctx.hasSegmentationMasks()) {
                        
                        // Get options from user
@@ -38,11 +39,9 @@ public class ExportImageMapAction extends AppAction{
                                
                                // 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);
@@ -58,7 +57,7 @@ public class ExportImageMapAction extends AppAction{
                                        
                                        // Export
                                        try {
-                                               exporter.export(result.folder, mask.layerNumber);
+                                               exporter.export(result.folder,masks);
                                        } catch (IOException e) {
                                                handleError(e);
                                                return;
@@ -66,7 +65,6 @@ public class ExportImageMapAction extends AppAction{
                                                handleError(e);
                                                return;
                                        } 
-                               }
                                // for opening the image after saving as ImageMap
                                if (result.open) {
                                        File file = new File(result.folder, result.html);
index 3418b85f27980fe23677d06ead78cd8c6d3ea27c..0e5a1dbe27c7c8aad455c08612d8adca6d3a53b4 100644 (file)
@@ -17,7 +17,7 @@ import javax.imageio.ImageIO;
  * @author Kevin McGuinness
  */
 public class Exporter {
-       private final SegmentationMask mask;
+//     private final List<SegmentationMask> masks;
        private final BufferedImage image;
        
        private RolloverEffect effect;
@@ -29,9 +29,9 @@ public class Exporter {
        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() {
@@ -98,82 +98,86 @@ public class Exporter {
                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) {
                        
@@ -183,7 +187,6 @@ public class Exporter {
                                preloads.add(filename);
                        }
                }
-               
                return preloads;
        }
 }
index 8c8ee38d3f93af4089ebde52edd15d9480ac1139..a92ba040318afdce73dd9b66e31ba84894dcf31a 100644 (file)
@@ -106,6 +106,7 @@ public class ImageMap {
                // Create preloads buffer
                StringBuffer preloads = new StringBuffer();
                int idx = 0;
+               //System.out.println("Preloads coming as before"+preloads());
                for (String s : preloads()) {
                        HtmlTag.indent(preloads, 8);
                        preloads.append("var image").append(idx);
@@ -115,7 +116,7 @@ public class ImageMap {
                        preloads.append(".src = '").append(s).append("'\n");
                        idx++;
                }
-               
+               //System.out.println("Preloads coming as after"+preloads.toString());
                StringBuffer contents = new StringBuffer();
                for (MapArea area : areas) {
                        contents.append('\n');
@@ -130,7 +131,6 @@ public class ImageMap {
                subs.put("map-name", mapName);
                subs.put("contents", contents.toString());
                subs.put("preloads", preloads.toString());
-               System.out.println("Contents coming as "+contents.toString());
                return substitute(template, subs);
        }