Changeset 2119


Ignore:
Timestamp:
01/18/07 09:25:11 (13 years ago)
Author:
melissa
Message:
  • Fixed how importer handles files with sizeC > 4.
  • Fixed bugs in ZeissZVIReader - if we give the reader a file with corrupt or malformed blocks, it will try harder to read it.
Location:
trunk/loci
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/FormatReader.java

    r2117 r2119  
    603603    if (stitch) { 
    604604      reader = new FileStitcher(reader, true); 
    605       String pat = 
    606         FilePattern.findPattern(new Location(map == null ? id : map)); 
     605      String pat = FilePattern.findPattern(new Location(id)); 
    607606      if (pat != null) id = pat; 
    608607    } 
  • trunk/loci/formats/in/ZeissZVIReader.java

    r2117 r2119  
    420420        } 
    421421      } 
    422       else currentOrder[0] = (zSize > tSize) ? "XYCZT" : "XYCTZ"; 
     422      else if (metadata.get("MultiChannel Color") != null) { 
     423        currentOrder[0] = (zSize > tSize) ? "XYCZT" : "XYCTZ"; 
     424      } 
     425      else currentOrder[0] = (zSize > tSize) ? "XYZTC" : "XYTZC"; 
    423426    } 
    424427    catch (Throwable t) { 
     
    496499        byte[] data = new byte[numbytes + 4]; // append 0 for final offset 
    497500        r.setVar("data", data); 
    498         r.exec("dis.read(data)"); 
     501         
     502        // Suppressing an exception here looks like poor style. 
     503        // However, this at least gives us a chance at reading files with 
     504        // corrupt blocks. 
     505        try { 
     506          r.exec("dis.read(data)"); 
     507        } 
     508        catch (ReflectException e) {  
     509          if (debug) e.printStackTrace(); 
     510        } 
    499511 
    500512        String entryName = (String) r.getVar("entryName"); 
  • trunk/loci/plugins/Importer.java

    r2117 r2119  
    294294      FileStitcher fs = null; 
    295295 
     296      int pixelType = r.getPixelType(id); 
     297 
    296298      if (stitchFiles) { 
    297299        fs = new FileStitcher(r, true); 
     
    311313      if (fs != null) { 
    312314        if (mergeChannels) { 
    313           if (r.getPixelType(id) == FormatReader.FLOAT) { 
     315          if (pixelType == FormatReader.FLOAT) { 
    314316            r = new ChannelMerger(fs); 
    315317          } 
     
    658660 
    659661            int bpp = FormatReader.getBytesPerPixel(type);; 
    660  
    661             if (b.length != w * h * c * bpp) { 
     662             
     663            if (b.length != w * h * c * bpp && b.length != w * h * bpp) { 
    662664              // HACK - byte array dimensions are incorrect - image is probably 
    663665              // a different size, but we have no way of knowing what size; 
     
    11081110        newStack = new ImageStack(s.getWidth(), s.getHeight()); 
    11091111 
    1110         for (int z=0; z<r.getSizeZ(id); z++) { 
    1111           for (int t=0; t<r.getSizeT(id); t++) { 
     1112        int sizeZ = r.getSizeZ(id); 
     1113        int sizeT = r.getSizeT(id); 
     1114         
     1115        int extraC = 1; 
     1116        if (c > 4) { 
     1117          extraC *= (c % 3 == 0 ? 4 : 3); 
     1118          c /= extraC; 
     1119        } 
     1120 
     1121        for (int z=0; z<sizeZ; z++) { 
     1122          for (int t=0; t<sizeT; t++) { 
    11121123            byte[][] bytes = new byte[c][]; 
    1113             for (int ch=0; ch<c; ch++) { 
    1114               int ndx = r.getIndex(id, z, ch, t) + 1; 
    1115               bytes[ch] = (byte[]) s.getProcessor(ndx).getPixels(); 
    1116             } 
    1117             ColorProcessor cp = new ColorProcessor(s.getWidth(), s.getHeight()); 
    1118             cp.setRGB(bytes[0], bytes[1], bytes.length == 3 ? bytes[2] : 
    1119               new byte[s.getWidth() * s.getHeight()]); 
    1120             newStack.addSlice(s.getSliceLabel( 
    1121               r.getIndex(id, z, c - 1, t) + 1), cp); 
     1124            for (int ch1=0; ch1<extraC; ch1++) { 
     1125              for (int ch2=0; ch2<c; ch2++) { 
     1126                int ndx = r.getIndex(id, z, ch1*c + ch2, t) + 1; 
     1127                bytes[ch2] = (byte[]) s.getProcessor(ndx).getPixels(); 
     1128              } 
     1129              ColorProcessor cp =  
     1130                new ColorProcessor(s.getWidth(), s.getHeight()); 
     1131              cp.setRGB(bytes[0], bytes[1], bytes.length == 3 ? bytes[2] : 
     1132                new byte[s.getWidth() * s.getHeight()]); 
     1133              newStack.addSlice(s.getSliceLabel( 
     1134                r.getIndex(id, z, ch1*c + c - 1, t) + 1), cp); 
     1135            } 
    11221136          } 
    11231137        } 
     
    11881202    } 
    11891203    catch (Exception e) { 
     1204      /* debug */ e.printStackTrace(); 
    11901205      if (!stitchStack) imp.show(); 
    11911206      else imps.add(imp); 
Note: See TracChangeset for help on using the changeset viewer.