Changeset 7446


Ignore:
Timestamp:
12/20/10 15:40:58 (9 years ago)
Author:
melissa
Message:

Parse and apply LUTs stored in the 'u32OffsetChannelColors' block. See #617.

File:
1 edited

Legend:

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

    r7427 r7446  
    152152 
    153153  private double pixelSizeX, pixelSizeY, pixelSizeZ; 
    154   private byte[][] lut = null; 
     154  private byte[][][] lut = null; 
    155155  private Vector<Double> timestamps; 
    156156  private int validChannels; 
     
    176176 
    177177  private int prevPlane = -1; 
     178  private int prevChannel = 0; 
    178179  private byte[] prevBuf = null; 
    179180  private Region prevRegion = null; 
     
    216217      totalROIs = 0; 
    217218      prevPlane = -1; 
     219      prevChannel = 0; 
    218220      prevBuf = null; 
    219221      prevRegion = null; 
     
    263265      return null; 
    264266    } 
    265     byte[][] b = new byte[3][256]; 
    266     for (int i=2; i>=3-validChannels; i--) { 
    267       for (int j=0; j<256; j++) { 
    268         b[i][j] = (byte) j; 
    269       } 
    270     } 
     267 
     268    byte[][] b = new byte[3][]; 
     269    b[0] = lut[getSeries()][prevChannel * 3]; 
     270    b[1] = lut[getSeries()][prevChannel * 3 + 1]; 
     271    b[2] = lut[getSeries()][prevChannel * 3 + 2]; 
     272 
    271273    return b; 
    272274  } 
     
    330332      ImageTools.splitChannels( 
    331333        prevBuf, buf, c, getSizeC(), bpp, false, false, w * h * bpp); 
     334      prevChannel = c; 
    332335    } 
    333336    else { 
    334337      tiffParser.getSamples(ifds.get(no), buf, x, y, w, h); 
     338      prevChannel = getZCTCoords(no)[1]; 
    335339    } 
    336340    in.close(); 
     
    423427 
    424428    MetadataStore store = makeFilterMetadata(); 
     429 
     430    lut = new byte[ifdsList.size()][][]; 
    425431 
    426432    for (int series=0; series<ifdsList.size(); series++) { 
     
    731737    } 
    732738 
    733     core[series].indexed = 
    734       lut != null && lut[series] != null && getSizeC() == 1; 
     739    core[series].indexed = lut != null && lut[series] != null; 
    735740    if (isIndexed()) { 
    736       core[series].sizeC = 1; 
    737741      core[series].rgb = false; 
    738742    } 
     
    922926 
    923927      if (channelColorsOffset != 0) { 
    924         in.seek(channelColorsOffset + 16); 
     928        in.seek(channelColorsOffset + 12); 
     929        int colorsOffset = in.readInt(); 
    925930        int namesOffset = in.readInt(); 
    926931 
     932        // read the color of each channel 
     933 
     934        if (colorsOffset > 0) { 
     935          in.seek(channelColorsOffset + colorsOffset); 
     936          lut[getSeries()] = new byte[getSizeC() * 3][256]; 
     937          core[getSeries()].indexed = true; 
     938          for (int i=0; i<getSizeC(); i++) { 
     939            int color = in.readInt(); 
     940            int red = color & 0xff; 
     941            int green = (color & 0xff00) >> 8; 
     942            int blue = (color & 0xff0000) >> 16; 
     943 
     944            for (int j=0; j<256; j++) { 
     945              lut[getSeries()][i * 3][j] = (byte) ((red / 255.0) * j); 
     946              lut[getSeries()][i * 3 + 1][j] = (byte) ((green / 255.0) * j); 
     947              lut[getSeries()][i * 3 + 2][j] = (byte) ((blue / 255.0) * j); 
     948            } 
     949          } 
     950        } 
     951 
    927952        // read the name of each channel 
    928953 
    929954        if (namesOffset > 0) { 
    930           in.skipBytes(namesOffset - 16); 
     955          in.seek(channelColorsOffset + namesOffset + 4); 
    931956 
    932957          for (int i=0; i<getSizeC(); i++) { 
Note: See TracChangeset for help on using the changeset viewer.