Changeset 4320


Ignore:
Timestamp:
08/20/08 12:10:22 (12 years ago)
Author:
melissa
Message:

Added LUT support for Openlab LIFF files; fixed a couple of bugs in FileStitcher and the test suite.

Location:
trunk/loci
Files:
3 edited

Legend:

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

    r4301 r4320  
    10481048      core.interleaved[i] = rr.isInterleaved(); 
    10491049      core.seriesMetadata[i] = rr.getMetadata(); 
     1050      core.indexed[i] = rr.isIndexed(); 
     1051      core.falseColor[i] = rr.isFalseColor(); 
    10501052      sizeZ[i] = rr.getSizeZ(); 
    10511053      sizeC[i] = rr.getSizeC(); 
  • trunk/loci/formats/in/OpenlabReader.java

    r4318 r4320  
    9292  private int[][] planeOffsets; 
    9393 
     94  private Vector luts; 
     95  private int lastPlane; 
     96 
    9497  // -- Constructor -- 
    9598 
     
    107110    if (!FormatTools.validStream(stream, blockCheckLen, false)) return false; 
    108111    return stream.readLong() == 0xffff696d7072L; 
     112  } 
     113 
     114  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
     115  public byte[][] get8BitLookupTable() { 
     116    Object lut = luts.get(planeOffsets[series][lastPlane]); 
     117    if (lut == null) return null; 
     118    return lut instanceof byte[][] ? (byte[][]) lut : null; 
    109119  } 
    110120 
     
    118128    FormatTools.checkPlaneNumber(this, no); 
    119129    FormatTools.checkBufferSize(this, buf.length); 
     130 
     131    lastPlane = no; 
    120132 
    121133    int index = planeOffsets[series][no]; 
     
    257269    if (pict != null) pict.close(); 
    258270    planes = null; 
     271    luts = null; 
     272    lastPlane = 0; 
    259273  } 
    260274 
     
    266280    super.initFile(id); 
    267281    in = new RandomAccessStream(id); 
     282 
     283    luts = new Vector(); 
    268284 
    269285    status("Verifying Openlab LIFF format"); 
     
    371387        } 
    372388 
     389        // read the LUT, if present 
     390 
     391        if (planes[imagesFound].volumeType == MAC_256_COLORS) { 
     392          in.seek(nextTag - (257 * 8)); 
     393          byte[][] lut = new byte[3][256]; 
     394          for (int i=0; i<256; i++) { 
     395            in.skipBytes(2); 
     396            lut[0][255 - i] = (byte) (in.readShort() >> 8); 
     397            lut[1][255 - i] = (byte) (in.readShort() >> 8); 
     398            lut[2][255 - i] = (byte) (in.readShort() >> 8); 
     399          } 
     400          luts.add(lut); 
     401        } 
     402        else luts.add(null); 
     403 
    373404        imagesFound++; 
    374405      } 
     
    469500    core = new CoreMetadata(nSeries); 
    470501 
     502    Arrays.fill(core.indexed, false); 
     503 
    471504    for (int i=0; i<nSeries; i++) { 
    472505      core.sizeX[i] = planes[planeOffsets[i][0]].width; 
     
    478511        case MAC_4_GREYS: 
    479512        case MAC_256_GREYS: 
    480         case MAC_256_COLORS: 
    481513          core.pixelType[i] = FormatTools.UINT8; 
    482514          if (core.imageCount[i] > 1 && (core.sizeX[i] * core.sizeY[i] < 
     
    489521          core.sizeC[i] = 1; 
    490522          core.interleaved[i] = false; 
     523          break; 
     524        case MAC_256_COLORS: 
     525          core.pixelType[i] = FormatTools.UINT8; 
     526          core.rgb[i] = false; 
     527          core.sizeC[i] = 1; 
     528          core.interleaved[i] = false; 
     529          core.indexed[i] = true; 
    491530          break; 
    492531        case MAC_16_COLORS: 
     
    522561    Arrays.fill(core.currentOrder, "XYCZT"); 
    523562    Arrays.fill(core.littleEndian, false); 
    524     Arrays.fill(core.indexed, false); 
    525563    Arrays.fill(core.falseColor, false); 
    526564    Arrays.fill(core.metadataComplete, true); 
  • trunk/loci/tests/testng/FormatReaderTest.java

    r4319 r4320  
    473473 
    474474        boolean passIndexed = config.isIndexed() == reader.isIndexed(); 
     475        if (!passIndexed) { 
     476          msg = "Indexed: was " + reader.isIndexed() + ", expected " + 
     477            config.isIndexed(); 
     478        } 
     479 
    475480        boolean passFalseColor = 
    476481          config.isFalseColor() == reader.isFalseColor(); 
     482 
     483        if (!passFalseColor) { 
     484          msg = "FalseColor: was " + reader.isFalseColor() + ", expected " + 
     485            config.isFalseColor(); 
     486        } 
    477487 
    478488        success = passX && passY && passZ && passC && passT && passDim && 
Note: See TracChangeset for help on using the changeset viewer.