Changeset 6823


Ignore:
Timestamp:
08/19/10 14:21:59 (9 years ago)
Author:
melissa
Message:

Added reader for TIFFs produced by Nikon Elements. Closes #529.

Location:
trunk/components/bio-formats/src/loci/formats
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/bio-formats/src/loci/formats/in/ND2Handler.java

    r6819 r6823  
    2828import java.util.Hashtable; 
    2929 
     30import loci.common.DateTools; 
    3031import loci.formats.CoreMetadata; 
    3132import loci.formats.FormatException; 
    3233import loci.formats.FormatTools; 
     34import loci.formats.MetadataTools; 
     35import loci.formats.meta.MetadataStore; 
     36 
     37import ome.xml.model.primitives.NonNegativeInteger; 
     38import ome.xml.model.primitives.PositiveInteger; 
    3339 
    3440import org.xml.sax.Attributes; 
     
    4349 */ 
    4450public class ND2Handler extends DefaultHandler { 
     51 
     52  // -- Constants -- 
     53 
     54  private static final String DATE_FORMAT = "dd/MM/yyyy  HH:mm:ss"; 
    4555 
    4656  // -- Fields -- 
     
    8191  private String cameraModel; 
    8292  private int fieldIndex = 0; 
     93  private String date; 
    8394 
    8495  // -- Constructor -- 
     
    90101 
    91102  // -- ND2Handler API methods -- 
     103 
     104  public void populateROIs(MetadataStore store) { 
     105    for (int r=0; r<rois.size(); r++) { 
     106      Hashtable<String, String> roi = rois.get(r); 
     107      String type = roi.get("ROIType"); 
     108 
     109      if (type.equals("Text")) { 
     110        store.setROIID(MetadataTools.createLSID("ROI", r), r); 
     111        store.setTextID(MetadataTools.createLSID("Shape", r, 0), r, 0); 
     112        store.setTextFontSize( 
     113          NonNegativeInteger.valueOf(roi.get("fHeight")), r, 0); 
     114        store.setTextValue(roi.get("eval-text"), r, 0); 
     115        store.setTextStrokeWidth(new Double(roi.get("line-width")), r, 0); 
     116 
     117        String rectangle = roi.get("rectangle"); 
     118        String[] p = rectangle.split(","); 
     119        double[] points = new double[p.length]; 
     120        for (int i=0; i<p.length; i++) { 
     121          points[i] = Double.parseDouble(p[i]); 
     122        } 
     123 
     124        store.setRectangleID(MetadataTools.createLSID("Shape", r, 1), r, 1); 
     125        store.setRectangleX(points[0], r, 1); 
     126        store.setRectangleY(points[1], r, 1); 
     127        store.setRectangleWidth(points[2] - points[0], r, 1); 
     128        store.setRectangleHeight(points[3] - points[1], r, 1); 
     129      } 
     130      else if (type.equals("HorizontalLine") || type.equals("VerticalLine")) { 
     131        store.setROIID(MetadataTools.createLSID("ROI", r), r); 
     132 
     133        String segments = roi.get("segments"); 
     134        segments = segments.replaceAll("\\[\\]", ""); 
     135        String[] points = segments.split("\\)"); 
     136 
     137        StringBuffer sb = new StringBuffer(); 
     138        for (int i=0; i<points.length; i++) { 
     139          points[i] = points[i].substring(points[i].indexOf(":") + 1); 
     140          sb.append(points[i]); 
     141          if (i < points.length - 1) sb.append(" "); 
     142        } 
     143 
     144        store.setPolylineID(MetadataTools.createLSID("Shape", r, 0), r, 0); 
     145        store.setPolylinePoints(sb.toString(), r, 0); 
     146      } 
     147    } 
     148  } 
     149 
     150  public String getDate() { 
     151    return date; 
     152  } 
    92153 
    93154  public Hashtable<String, Object> getMetadata() { 
     
    340401      refractiveIndex = new Double(sanitizeDouble(value)); 
    341402    } 
    342     else if (key.equals("sObjective") || key.equals("wsObjectiveName")) { 
     403    else if (key.equals("sObjective") || key.equals("wsObjectiveName") || 
     404      key.equals("sOptics")) 
     405    { 
    343406      String[] tokens = value.split(" "); 
    344407      int magIndex = -1; 
     
    537600      } 
    538601    } 
     602    else if (key.equals("CameraUniqueName")) { 
     603      cameraModel = value; 
     604    } 
     605    else if (key.equals("ExposureTime")) { 
     606      exposureTime.add(new Double(value) / 1000d); 
     607    } 
     608    else if (key.equals("sDate")) { 
     609      date = DateTools.formatDate(value, DATE_FORMAT); 
     610    } 
    539611  } 
    540612 
  • trunk/components/bio-formats/src/loci/formats/in/NativeND2Reader.java

    r6819 r6823  
    970970      return; 
    971971    } 
    972     for (int r=0; r<rois.size(); r++) { 
    973       Hashtable<String, String> roi = rois.get(r); 
    974       String type = roi.get("ROIType"); 
    975  
    976       if (type.equals("Text")) { 
    977         store.setTextFontSize( 
    978           NonNegativeInteger.valueOf(roi.get("fHeight")), r, 0); 
    979         store.setTextValue(roi.get("eval-text"), r, 0); 
    980         store.setTextStrokeWidth(new Double(roi.get("line-width")), r, 0); 
    981  
    982         String rectangle = roi.get("rectangle"); 
    983         String[] p = rectangle.split(","); 
    984         double[] points = new double[p.length]; 
    985         for (int i=0; i<p.length; i++) { 
    986           points[i] = Double.parseDouble(p[i]); 
    987         } 
    988  
    989         store.setRectangleX(points[0], r, 1); 
    990         store.setRectangleY(points[1], r, 1); 
    991         store.setRectangleWidth(points[2] - points[0], r, 1); 
    992         store.setRectangleHeight(points[3] - points[1], r, 1); 
    993       } 
    994       else if (type.equals("HorizontalLine") || type.equals("VerticalLine")) { 
    995         String segments = roi.get("segments"); 
    996         segments = segments.replaceAll("\\[", ""); 
    997         segments = segments.replaceAll("\\]", ""); 
    998         String[] points = segments.split("\\)"); 
    999  
    1000         StringBuffer sb = new StringBuffer(); 
    1001         for (int i=0; i<points.length; i++) { 
    1002           points[i] = points[i].substring(points[i].indexOf(":") + 1); 
    1003           sb.append(points[i]); 
    1004           if (i < points.length - 1) sb.append(" "); 
    1005         } 
    1006         store.setPolylinePoints(sb.toString(), r, 0); 
    1007       } 
    1008     } 
     972    handler.populateROIs(store); 
    1009973  } 
    1010974 
  • trunk/components/bio-formats/src/loci/formats/readers.txt

    r6801 r6823  
    138138loci.formats.in.FEITiffReader         # tif 
    139139loci.formats.in.SimplePCITiffReader   # tif 
     140loci.formats.in.NikonElementsTiffReader # tif 
    140141 
    141142# standard TIFF reader must go last (it accepts any TIFF) 
  • trunk/components/bio-formats/src/loci/formats/tiff/IFD.java

    r6509 r6823  
    344344          sb.append((char) s); 
    345345        } 
    346         else sb.append("\n"); 
     346        else if (s != 0) sb.append("\n"); 
    347347      } 
    348348      value = sb.toString(); 
Note: See TracChangeset for help on using the changeset viewer.