Changeset 3979


Ignore:
Timestamp:
04/24/08 15:05:08 (12 years ago)
Author:
melissa
Message:

Fixed bug in metadata block detection logic.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/SlidebookReader.java

    r3973 r3979  
    320320      long off = ((Long) metadataOffsets.get(i)).longValue(); 
    321321      in.seek(off); 
    322       char n = (char) in.readShort(); 
    323       if (n == 'i') { 
    324         iCount++; 
    325         in.skipBytes(78); 
    326         int start = 0; 
    327         for (int j=start; j<pixelOffsets.size(); j++) { 
    328           long length = ((Long) pixelLengths.get(j)).longValue(); 
    329           long offset = ((Long) pixelOffsets.get(j)).longValue(); 
    330           long end = j == pixelOffsets.size() - 1 ? in.length() : 
    331             ((Long) pixelOffsets.get(j + 1)).longValue(); 
    332           if (in.getFilePointer() >= (length + offset) && 
    333             in.getFilePointer() < end) 
    334           { 
    335             if (core.sizeX[j - start] == 0) { 
    336               core.sizeX[j - start] = in.readShort(); 
    337               core.sizeY[j - start] = in.readShort(); 
    338               int checkX = in.readShort(); 
    339               int checkY = in.readShort(); 
    340               int div = in.readShort(); 
    341               core.sizeX[j - start] /= div; 
    342               div = in.readShort(); 
    343               core.sizeY[j - start] /= div; 
     322      long next = i == metadataOffsets.size() - 1 ? in.length() : 
     323        ((Long) metadataOffsets.get(i + 1)).longValue(); 
     324      int count = 0; 
     325      while (off + count * 128 < next) { 
     326        in.seek(off + count * 128); 
     327        count++; 
     328        char n = (char) in.readShort(); 
     329        if (n == 'i') { 
     330          iCount++; 
     331          in.skipBytes(78); 
     332          int start = 0; 
     333          for (int j=start; j<pixelOffsets.size(); j++) { 
     334            long length = ((Long) pixelLengths.get(j)).longValue(); 
     335            long offset = ((Long) pixelOffsets.get(j)).longValue(); 
     336            long end = j == pixelOffsets.size() - 1 ? in.length() : 
     337              ((Long) pixelOffsets.get(j + 1)).longValue(); 
     338            if (in.getFilePointer() >= (length + offset) && 
     339              in.getFilePointer() < end) 
     340            { 
     341              if (core.sizeX[j - start] == 0) { 
     342                core.sizeX[j - start] = in.readShort(); 
     343                core.sizeY[j - start] = in.readShort(); 
     344                int checkX = in.readShort(); 
     345                int checkY = in.readShort(); 
     346                int div = in.readShort(); 
     347                core.sizeX[j - start] /= div; 
     348                div = in.readShort(); 
     349                core.sizeY[j - start] /= div; 
     350              } 
     351              if (prevSeries != j - start) { 
     352                iCount = 1; 
     353              } 
     354              prevSeries = j - start; 
     355              core.sizeC[j - start] = iCount; 
     356              break; 
    344357            } 
    345             if (prevSeries != j - start) { 
    346               iCount = 1; 
     358          } 
     359        } 
     360        else if (n == 'u') { 
     361          uCount++; 
     362          int start = 0; 
     363          for (int j=start; j<pixelOffsets.size(); j++) { 
     364            long length = ((Long) pixelLengths.get(j)).longValue(); 
     365            long offset = ((Long) pixelOffsets.get(j)).longValue(); 
     366            long end = j == pixelOffsets.size() - 1 ? in.length() : 
     367              ((Long) pixelOffsets.get(j + 1)).longValue(); 
     368            if (in.getFilePointer() >= (length + offset) && 
     369              in.getFilePointer() < end) 
     370            { 
     371              if (prevSeriesU != j - start) { 
     372                uCount = 1; 
     373              } 
     374              prevSeriesU = j - start; 
     375              core.sizeZ[j - start] = uCount; 
     376              break; 
    347377            } 
    348             prevSeries = j - start; 
    349             core.sizeC[j - start] = iCount; 
    350             break; 
    351           } 
    352         } 
    353       } 
    354       else if (n == 'u') { 
    355         uCount++; 
    356         int start = 0; 
    357         for (int j=start; j<pixelOffsets.size(); j++) { 
    358           long length = ((Long) pixelLengths.get(j)).longValue(); 
    359           long offset = ((Long) pixelOffsets.get(j)).longValue(); 
    360           long end = j == pixelOffsets.size() - 1 ? in.length() : 
    361             ((Long) pixelOffsets.get(j + 1)).longValue(); 
    362           if (in.getFilePointer() >= (length + offset) && 
    363             in.getFilePointer() < end) 
    364           { 
    365             if (prevSeriesU != j - start) { 
    366               uCount = 1; 
    367             } 
    368             prevSeriesU = j - start; 
    369             core.sizeZ[j - start] = uCount; 
    370             break; 
    371           } 
    372         } 
    373       } 
    374       else if (n == 'h') hCount++; 
    375       else if (n == 'j') { 
    376         // this block should contain an image name 
    377         in.skipBytes(14); 
    378         if (nextName < imageNames.length) { 
    379           imageNames[nextName++] = in.readCString().trim(); 
    380         } 
    381       } 
    382       else if (n == 'm') { 
    383         // this block should contain a channel name 
    384         if (in.getFilePointer() > ((Long) pixelOffsets.get(0)).longValue()) { 
     378          } 
     379        } 
     380        else if (n == 'h') hCount++; 
     381        else if (n == 'j') { 
     382          // this block should contain an image name 
    385383          in.skipBytes(14); 
    386           channelNames.add(in.readCString().trim()); 
     384          if (nextName < imageNames.length) { 
     385            imageNames[nextName++] = in.readCString().trim(); 
     386          } 
     387        } 
     388        else if (n == 'm') { 
     389          // this block should contain a channel name 
     390          if (in.getFilePointer() > ((Long) pixelOffsets.get(0)).longValue()) { 
     391            in.skipBytes(14); 
     392            channelNames.add(in.readCString().trim()); 
     393          } 
    387394        } 
    388395      } 
Note: See TracChangeset for help on using the changeset viewer.