Changeset 7541


Ignore:
Timestamp:
01/17/11 11:01:37 (9 years ago)
Author:
melissa
Message:

Parse valid bits per pixel from Slidebook files. Closes #626.

File:
1 edited

Legend:

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

    r7244 r7541  
    285285            while (!found && in.getFilePointer() < in.length()) { 
    286286              for (int i=0; i<n-6; i++) { 
    287                 if (((buf[i] == 'h' || buf[i] == 'i') && buf[i + 1] == 0 && 
    288                   buf[i + 4] == 'I' && buf[i + 5] == 'I') || 
    289                   (buf[i] == 0 && (buf[i + 1] == 'h' || buf[i + 1] == 'i') && 
    290                   buf[i + 4] == 'M' && buf[i + 5] == 'M')) 
     287                if ((buf[i + 4] == 'I' && buf[i + 5] == 'I') || 
     288                  (buf[i + 4] == 'M' && buf[i + 5] == 'M')) 
    291289                { 
    292                   found = true; 
    293                   in.seek(in.getFilePointer() - n + i - 20); 
    294                   if (buf[i] == 'i' || buf[i + 1] == 'i') { 
     290                  if (((buf[i] == 'h' || buf[i] == 'i') && buf[i + 1] == 0) || 
     291                    (buf[i] == 0 && (buf[i + 1] == 'h' || buf[i + 1] == 'i'))) 
     292                  { 
     293                    found = true; 
     294                    in.seek(in.getFilePointer() - n + i - 20); 
     295                    if (buf[i] == 'i' || buf[i + 1] == 'i') { 
     296                      pixelOffsets.remove(pixelOffsets.size() - 1); 
     297                    } 
     298                    break; 
     299                  } 
     300                  else if (((buf[i] == 'j' || buf[i] == 'k' || buf[i] == 'n') && 
     301                    buf[i + 1] == 0) || (buf[i] == 0 && (buf[i + 1] == 'j' || 
     302                    buf[i + 1] == 'k' || buf[i + 1] == 'n'))) 
     303                  { 
     304                    found = true; 
    295305                    pixelOffsets.remove(pixelOffsets.size() - 1); 
     306                    break; 
    296307                  } 
    297                   break; 
    298308                } 
    299309              } 
     
    313323                  length -= 2; 
    314324                } 
    315                 pixelLengths.add(new Long(length)); 
     325                if (length >= 1024) { 
     326                  pixelLengths.add(new Long(length)); 
     327                } 
     328                else pixelOffsets.remove(pixelOffsets.size() - 1); 
    316329              } 
    317330            } 
     
    380393      // if there are more than 100 blocks, we probably found a pixel block 
    381394      // by accident (but we'll check the first block anyway) 
    382       if (totalBlocks > 100) totalBlocks = 1; 
     395      //if (totalBlocks > 100) totalBlocks = 100; 
    383396      for (int q=0; q<totalBlocks; q++) { 
    384         if (withinPixels(off + q * 128)) break; 
     397        if (withinPixels(off + q * 128)) { 
     398          continue; 
     399        } 
    385400        in.seek(off + q * 128); 
    386401        char n = (char) in.readShort(); 
     402        while (n == 0 && in.getFilePointer() < off + (q + 1) * 128) { 
     403          n = (char) in.readShort(); 
     404        } 
     405        if (in.getFilePointer() >= in.length() - 2) break; 
    387406        if (n == 'i') { 
    388407          iCount++; 
     
    434453          String check = in.readString(2); 
    435454          if (check.equals("II") || check.equals("MM")) { 
     455            long pointer = in.getFilePointer(); 
    436456            // this block should contain an image name 
    437457            in.skipBytes(10); 
     
    462482              adjust = false; 
    463483            } 
     484 
     485            in.seek(pointer + 214); 
     486            int validBits = in.readShort(); 
     487            if (core[nextName - 1].bitsPerPixel == 0 && validBits <= 16) { 
     488              core[nextName - 1].bitsPerPixel = validBits; 
     489            } 
    464490          } 
    465491        } 
     
    483509          ndFilters.add(new Double(in.readFloat())); 
    484510          in.skipBytes(40); 
    485           setSeries(nextName); 
    486           addSeriesMeta("channel " + ndFilters.size() + " intensification", 
    487             in.readShort()); 
     511          if (nextName < getSeriesCount()) { 
     512            setSeries(nextName); 
     513            addSeriesMeta("channel " + ndFilters.size() + " intensification", 
     514              in.readShort()); 
     515          } 
    488516        } 
    489517        else if (n == 'k') { 
Note: See TracChangeset for help on using the changeset viewer.