Changeset 3131


Ignore:
Timestamp:
09/04/07 12:47:39 (12 years ago)
Author:
melissa
Message:

More work on indexed color stuff; minor bugfixes in ZVI and Perkin Elmer.

Location:
trunk/loci/formats
Files:
13 edited

Legend:

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

    r3129 r3131  
    288288 
    289289  /* @see IFormatReader#get8BitLookupTable() */ 
    290   public byte[][] get8BitLookupTable() { 
     290  public byte[][] get8BitLookupTable() throws FormatException { 
    291291    FormatTools.assertId(currentId, true, 2); 
    292292    return reader.get8BitLookupTable(); 
     
    294294 
    295295  /* @see IFormatReader#get16BitLookupTable() */ 
    296   public short[][] get16BitLookupTable() { 
     296  public short[][] get16BitLookupTable() throws FormatException { 
    297297    FormatTools.assertId(currentId, true, 2); 
    298298    return reader.get16BitLookupTable(); 
  • trunk/loci/formats/FormatReader.java

    r3129 r3131  
    253253 
    254254  /* @see IFormatReader#get8BitLookupTable() */ 
    255   public byte[][] get8BitLookupTable() { 
     255  public byte[][] get8BitLookupTable() throws FormatException { 
    256256    return null; 
    257257  } 
    258258 
    259259  /* @see IFormatReader#get16BitLookupTable() */ 
    260   public short[][] get16BitLookupTable() { 
     260  public short[][] get16BitLookupTable() throws FormatException { 
    261261    return null; 
    262262  } 
  • trunk/loci/formats/IFormatReader.java

    r3129 r3131  
    9898   * <code>INT8</code> or <code>UINT8</code>, this method will return null. 
    9999   */ 
    100   byte[][] get8BitLookupTable(); 
     100  byte[][] get8BitLookupTable() throws FormatException; 
    101101 
    102102  /** 
     
    107107   * <code>INT8</code> or <code>UINT8</code>, this method will return null. 
    108108   */ 
    109   short[][] get16BitLookupTable(); 
     109  short[][] get16BitLookupTable() throws FormatException; 
    110110 
    111111  /** 
  • trunk/loci/formats/ImageReader.java

    r3129 r3131  
    237237 
    238238  /* @see IFormatReader#get8BitLookupTable() */ 
    239   public byte[][] get8BitLookupTable() { 
     239  public byte[][] get8BitLookupTable() throws FormatException { 
    240240    FormatTools.assertId(currentId, true, 2); 
    241241    return getReader().get8BitLookupTable(); 
     
    243243 
    244244  /* @see IFormatReader#get16BitLookupTable() */ 
    245   public short[][] get16BitLookupTable() { 
     245  public short[][] get16BitLookupTable() throws FormatException { 
    246246    FormatTools.assertId(currentId, true, 2); 
    247247    return getReader().get16BitLookupTable(); 
  • trunk/loci/formats/ReaderWrapper.java

    r3129 r3131  
    122122  } 
    123123 
    124   public byte[][] get8BitLookupTable() { 
     124  public byte[][] get8BitLookupTable() throws FormatException { 
    125125    return reader.get8BitLookupTable(); 
    126126  } 
    127127 
    128   public short[][] get16BitLookupTable() { 
     128  public short[][] get16BitLookupTable() throws FormatException { 
    129129    return reader.get16BitLookupTable(); 
    130130  } 
  • trunk/loci/formats/TiffTools.java

    r3129 r3131  
    807807    int samplesPerPixel = getSamplesPerPixel(ifd); 
    808808    int photoInterp = getPhotometricInterpretation(ifd); 
    809     if (samplesPerPixel == 1 && (photoInterp == RGB_PALETTE || 
    810       photoInterp == CFA_ARRAY)) 
    811     { 
    812       samplesPerPixel = 3; 
    813     } 
    814809    int bpp = getBitsPerSample(ifd)[0]; 
    815810    while ((bpp % 8) != 0) bpp++; 
     
    858853    if (ifd.get(new Integer(VALID_BITS)) == null && bitsPerSample[0] > 0) { 
    859854      int[] validBits = bitsPerSample; 
    860       if (photoInterp == RGB_PALETTE || photoInterp == CFA_ARRAY) { 
    861         int vb = validBits[0]; 
    862         validBits = new int[3]; 
    863         for (int i=0; i<validBits.length; i++) validBits[i] = vb; 
    864       } 
    865855      putIFDValue(ifd, VALID_BITS, validBits); 
    866856    } 
     
    11971187    } 
    11981188 
    1199     if (samplesPerPixel == 1 && 
    1200       (photoInterp == RGB_PALETTE || photoInterp == CFA_ARRAY)) 
    1201     { 
    1202       samplesPerPixel = 3; 
    1203     } 
    1204  
    12051189    if (photoInterp == CFA_ARRAY) { 
    12061190      int[] tempMap = new int[colorMap.length + 2]; 
     
    12101194      colorMap = tempMap; 
    12111195    } 
    1212  
    1213     //if (planarConfig == 2) numSamples *= samplesPerPixel; 
    12141196 
    12151197    short[][] samples = new short[samplesPerPixel][numSamples]; 
     
    13881370    int[] validBits = getIFDIntArray(ifd, VALID_BITS, false); 
    13891371 
    1390     if (photoInterp == RGB_PALETTE || photoInterp == CFA_ARRAY) { 
    1391       samplesPerPixel = 3; 
    1392     } 
    1393  
    13941372    if (bitsPerSample[0] == 16 || bitsPerSample[0] == 12) { 
    13951373      // First wrap the byte arrays and then use the features of the 
     
    16711649              (short) (Integer.MAX_VALUE - samples[i][ndx]); // invert colors 
    16721650          } 
    1673           else if (photoInterp == RGB_PALETTE) { 
    1674             int x = (int) (b < 0 ? 256 + b : b); 
    1675             int red = colorMap[x % colorMap.length]; 
    1676             int green = colorMap[(x + bpsPow) % 
    1677               colorMap.length]; 
    1678             int blue = colorMap[(x + 2*bpsPow) % 
    1679               colorMap.length]; 
    1680             int[] components = {red, green, blue}; 
    1681             samples[i][ndx] = (short) components[i]; 
    1682           } 
    16831651          else if (photoInterp == CFA_ARRAY) { 
    16841652            if (i == 0) { 
     
    17121680          if (photoInterp == WHITE_IS_ZERO) { // invert color value 
    17131681            samples[i][ndx] = (short) (Integer.MAX_VALUE - samples[i][ndx]); 
    1714           } 
    1715           else if (photoInterp == RGB_PALETTE) { 
    1716             index--; 
    1717             int x = (int) (b < 0 ? 256 + b : b); 
    1718             int cndx = i == 0 ? x : (i == 1 ? (x + bpsPow) : (x + 2*bpsPow)); 
    1719             int cm = colorMap[cndx]; 
    1720             samples[i][ndx] = (short) (maxValue == 0 ? (cm / 256) : cm); 
    17211682          } 
    17221683          else if (photoInterp == CMYK) { 
     
    17551716            samples[i][ndx] = (short) (max - samples[i][ndx]); 
    17561717          } 
    1757           else if (photoInterp == RGB_PALETTE) { 
    1758             index -= numBytes; 
    1759  
    1760             int x = samples[i][ndx];  // this is the index into the color table 
    1761             int cndx = i == 0 ? x : (i == 1 ? (x + bpsPow) : (x + 2*bpsPow)); 
    1762             int cm = colorMap[cndx]; 
    1763             samples[i][ndx] = (short) (maxValue == 0 ? 
    1764               (cm % (bpsPow - 1)) : cm); 
    1765           } 
    17661718          else if (photoInterp == CMYK) { 
    17671719            samples[i][ndx] = (short) (Integer.MAX_VALUE - samples[i][ndx]); 
     
    17861738            samples[i][ndx] = (short) (max - samples[i][ndx]); 
    17871739          } 
    1788           else if (photoInterp == RGB_PALETTE) { 
    1789             index -= numBytes; 
    1790  
    1791             int x = samples[i][ndx];  // this is the index into the color table 
    1792             int cndx = i == 0 ? x : (i == 1 ? (x + bpsPow) : (x + 2*bpsPow)); 
    1793             int cm = colorMap[cndx]; 
    1794  
    1795             samples[i][ndx] = (short) (maxValue == 0 ? 
    1796               (cm % (bpsPow - 1)) : cm); 
    1797           } 
    17981740          else if (photoInterp == CMYK) { 
    17991741            samples[i][ndx] = (short) (Integer.MAX_VALUE - samples[i][ndx]); 
     
    18011743        } // end else 
    18021744      } 
    1803       if (photoInterp == RGB_PALETTE) index += (bps0 / 8); 
    18041745    } 
    18051746  } 
  • trunk/loci/formats/in/AVIReader.java

    r3129 r3131  
    106106 
    107107  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
    108   public byte[][] get8BitLookupTable() { 
     108  public byte[][] get8BitLookupTable() throws FormatException { 
    109109    FormatTools.assertId(currentId, true, 1); 
    110110    return new byte[][] {pr, pg, pb}; 
  • trunk/loci/formats/in/BMPReader.java

    r3097 r3131  
    2525package loci.formats.in; 
    2626 
    27 import java.awt.image.BufferedImage; 
     27import java.awt.image.*; 
    2828import java.io.IOException; 
    2929import loci.formats.*; 
     
    8181  } 
    8282 
     83  /* @see loci.formats.IFormatReader#isIndexed() */ 
     84  public boolean isIndexed() { 
     85    FormatTools.assertId(currentId, true, 1);  
     86    return palette != null;   
     87  } 
     88 
     89  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
     90  public byte[][] get8BitLookupTable() throws FormatException { 
     91    FormatTools.assertId(currentId, true, 1); 
     92    return palette;  
     93  } 
     94 
    8395  /* @see loci.formats.IFormatReader#openBytes(int) */ 
    8496  public byte[] openBytes(int no) throws FormatException, IOException { 
    8597    FormatTools.assertId(currentId, true, 1); 
    86     byte[] buf = new byte[core.sizeX[0] * core.sizeY[0] * core.sizeC[0]]; 
     98    int size = core.sizeX[0] * core.sizeY[0]; 
     99    if (!isIndexed()) size *= core.sizeC[0]; 
     100    byte[] buf = new byte[size]; 
    87101    return openBytes(no, buf); 
    88102  } 
     
    99113    int pixels = core.sizeX[0] * core.sizeY[0]; 
    100114 
    101     if (buf.length < pixels * (bpp / 8)) { 
    102       throw new FormatException("Buffer too small."); 
    103     } 
     115    int size = isIndexed() ? pixels : pixels * (bpp / 8); 
     116    if (buf.length < size) throw new FormatException("Buffer too small."); 
    104117 
    105118    if (compression != 0) { 
     
    112125    if (palette != null && palette[0].length > 0) { 
    113126      for (int y=core.sizeY[0]-1; y>=0; y--) { 
    114         for (int x=0; x<core.sizeX[0]; x++) { 
    115           int val = in.read(); 
    116           if (val < 0) val += 127; 
    117           buf[y*core.sizeX[0] + x] = palette[0][val]; 
    118           buf[y*core.sizeX[0] + x + pixels] = palette[1][val]; 
    119           buf[y*core.sizeX[0] + x + 2*pixels] = palette[2][val]; 
    120         } 
     127        in.read(buf, y*core.sizeX[0], core.sizeX[0]);  
    121128      } 
     129      return buf; 
    122130    } 
    123131    else { 
    124132      if (core.sizeC[0] == 1) { 
    125133        for (int y=core.sizeY[0]-1; y>=0; y--) { 
    126           for (int x=0; x<core.sizeX[0]; x++) { 
    127             buf[y*core.sizeX[0] + x] = (byte) (in.read() & 0xff); 
    128           } 
     134          in.read(buf, y*core.sizeX[0], core.sizeX[0]); 
    129135        } 
    130136      } 
     
    146152  public BufferedImage openImage(int no) throws FormatException, IOException { 
    147153    FormatTools.assertId(currentId, true, 1); 
    148     return ImageTools.makeImage(openBytes(no), core.sizeX[0], core.sizeY[0], 
    149       core.sizeC[0], false); 
     154    BufferedImage b = ImageTools.makeImage(openBytes(no), core.sizeX[0],  
     155      core.sizeY[0], core.sizeC[0], false); 
     156    if (isIndexed()) {  
     157      byte[][] table = get8BitLookupTable(); 
     158      IndexedColorModel model =  
     159        new IndexedColorModel(8, table[0].length, table); 
     160      WritableRaster raster = Raster.createWritableRaster(b.getSampleModel(), 
     161        b.getData().getDataBuffer(), null); 
     162      b = new BufferedImage(model, raster, false, null);  
     163    }  
     164    return b;  
    150165  } 
    151166 
  • trunk/loci/formats/in/BaseTiffReader.java

    r3104 r3131  
    8080  } 
    8181 
     82  /* @see loci.formats.IFormatReader#isIndexed() */ 
     83  public boolean isIndexed() { 
     84    FormatTools.assertId(currentId, true, 1);   
     85    return TiffTools.getIFDIntValue(ifds[0],  
     86      TiffTools.PHOTOMETRIC_INTERPRETATION) == TiffTools.RGB_PALETTE;  
     87  } 
     88 
     89  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
     90  public byte[][] get8BitLookupTable() throws FormatException { 
     91    FormatTools.assertId(currentId, true, 1);   
     92    int[] bits = TiffTools.getBitsPerSample(ifds[0]); 
     93    if (bits[0] <= 8) { 
     94      int[] colorMap =  
     95        (int[]) TiffTools.getIFDValue(ifds[0], TiffTools.COLOR_MAP); 
     96      byte[][] table = new byte[3][colorMap.length / 3]; 
     97      int next = 0;  
     98      for (int j=0; j<table.length; j++) { 
     99        for (int i=0; i<table[0].length; i++) { 
     100          if (core.littleEndian[0]) { 
     101            table[j][i] = (byte) (colorMap[next++] & 0xff); 
     102          } 
     103          else table[j][i] = (byte) ((colorMap[next++] & 0xff00) >> 8); 
     104        } 
     105      } 
     106 
     107      return table;  
     108    } 
     109    return null;  
     110  } 
     111 
     112  /* @see loci.formats.IFormatReader#get16BitLookupTable() */ 
     113  public short[][] get16BitLookupTable() throws FormatException { 
     114    FormatTools.assertId(currentId, true, 1);   
     115    int[] bits = TiffTools.getBitsPerSample(ifds[0]);  
     116    if (bits[0] <= 16 && bits[0] > 8) { 
     117      int[] colorMap =  
     118        (int[]) TiffTools.getIFDValue(ifds[0], TiffTools.COLOR_MAP); 
     119      short[][] table = new short[3][colorMap.length / 3]; 
     120      int next = 0;  
     121      for (int i=0; i<table.length; i++) { 
     122        for (int j=0; j<table[0].length; j++) { 
     123          if (core.littleEndian[0]) { 
     124            table[i][j] = (short) (colorMap[next++] & 0xffff); 
     125          } 
     126          else { 
     127            int n = colorMap[next++]; 
     128            table[i][j] =  
     129              (short) (((n & 0xff0000) >> 8) | ((n & 0xff000000) >> 24)); 
     130          } 
     131        } 
     132      } 
     133      return table;  
     134    } 
     135    return null;  
     136  } 
     137 
    82138  /* @see loci.formats.IFormatReader#getMetadataValue(String) */ 
    83139  public Object getMetadataValue(String field) { 
     
    94150 
    95151    int bytesPerPixel = FormatTools.getBytesPerPixel(getPixelType()); 
    96     byte[] buf = new byte[getSizeX() * getSizeY() * bytesPerPixel * 
    97       getRGBChannelCount()]; 
     152    int bufSize = getSizeX() * getSizeY() * bytesPerPixel; 
     153    if (!isIndexed()) bufSize *= getRGBChannelCount(); 
     154    byte[] buf = new byte[bufSize]; 
    98155    return openBytes(no, buf); 
    99156  } 
     
    119176    } 
    120177 
    121     return TiffTools.getImage(ifds[no], in); 
     178    BufferedImage b = TiffTools.getImage(ifds[no], in); 
     179    if (isIndexed()) { 
     180      byte[][] table = get8BitLookupTable(); 
     181      IndexedColorModel model = null; 
     182      if (table != null) { 
     183        model = new IndexedColorModel(8, table[0].length, table); 
     184      } 
     185      else { 
     186        short[][] t = get16BitLookupTable(); 
     187        model = new IndexedColorModel(16, t[0].length, t); 
     188      } 
     189 
     190      WritableRaster raster = Raster.createWritableRaster(b.getSampleModel(), 
     191        b.getData().getDataBuffer(), null); 
     192      b = new BufferedImage(model, raster, false, null); 
     193    } 
     194    return b; 
    122195  } 
    123196 
  • trunk/loci/formats/in/GIFReader.java

    r3097 r3131  
    2525package loci.formats.in; 
    2626 
    27 import java.awt.image.BufferedImage; 
     27import java.awt.image.*; 
    2828import java.io.*; 
    2929import java.util.Vector; 
     
    9797 
    9898  private Vector images; 
     99  private Vector colorTables; 
    99100 
    100101  // -- Constructor -- 
     
    109110  /* @see loci.formats.IFormatReader#isThisType(byte[]) */ 
    110111  public boolean isThisType(byte[] block) { return false; } 
     112 
     113  /* @see loci.formats.IFormatReader#isIndexed() */ 
     114  public boolean isIndexed() { 
     115    return true; 
     116  } 
     117 
     118  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
     119  public byte[][] get8BitLookupTable() throws FormatException { 
     120    FormatTools.assertId(currentId, true, 1);  
     121    byte[][] table = new byte[3][act.length]; 
     122    for (int i=0; i<act.length; i++) { 
     123      table[0][i] = (byte) ((act[i] >> 16) & 0xff); 
     124      table[1][i] = (byte) ((act[i] >> 8) & 0xff); 
     125      table[2][i] = (byte) (act[i] & 0xff); 
     126    } 
     127    return table;  
     128  } 
    111129 
    112130  /* @see loci.formats.IFormatReader#openBytes(int) */ 
     
    129147    } 
    130148 
    131     int[] ints = (int[]) images.get(no); 
     149    act = (int[]) colorTables.get(no); 
     150 
     151    buf = (byte[]) images.get(no); 
    132152    if (no > 0) { 
    133       int[] prev = (int[]) images.get(no - 1); 
    134       for (int i=0; i<ints.length; i++) { 
    135         if ((ints[i] & 0x00ffffff) == 0) { 
    136           ints[i] = prev[i]; 
    137         } 
    138       } 
    139       images.setElementAt(ints, no); 
    140     } 
    141  
    142     for (int i=0; i<ints.length; i++) { 
    143       buf[i] = (byte) ((ints[i] & 0xff0000) >> 16); 
    144       buf[i + ints.length] = (byte) ((ints[i] & 0xff00) >> 8); 
    145       buf[i + 2*ints.length] = (byte) (ints[i] & 0xff); 
    146     } 
     153      byte[] prev = (byte[]) images.get(no - 1); 
     154      for (int i=0; i<buf.length; i++) { 
     155        if ((act[buf[i] & 0xff] & 0x00ffffff) == 0) { 
     156          buf[i] = prev[i]; 
     157        } 
     158      } 
     159      images.setElementAt(buf, no); 
     160    } 
     161 
    147162    return buf; 
    148163  } 
     
    154169    FormatTools.assertId(currentId, true, 1); 
    155170    byte[] bytes = openBytes(no); 
    156     return ImageTools.makeImage(bytes, core.sizeX[0], core.sizeY[0], 
     171    BufferedImage b = ImageTools.makeImage(bytes, core.sizeX[0], core.sizeY[0], 
    157172      bytes.length / (core.sizeX[0] * core.sizeY[0]), false, 1, true); 
     173    byte[][] table = get8BitLookupTable(); 
     174    IndexedColorModel model = new IndexedColorModel(8, table[0].length, table); 
     175    WritableRaster raster = Raster.createWritableRaster(b.getSampleModel(), 
     176      b.getData().getDataBuffer(), null); 
     177    return new BufferedImage(model, raster, false, null);  
    158178  } 
    159179 
     
    170190    in.order(true); 
    171191    images = new Vector(); 
     192    colorTables = new Vector(); 
    172193 
    173194    String ident = in.readString(6); 
     
    482503  private void setPixels() { 
    483504    // expose destination image's pixels as an int array 
    484     int[] dest = new int[core.sizeX[0] * core.sizeY[0]]; 
     505    byte[] dest = new byte[core.sizeX[0] * core.sizeY[0]]; 
    485506    int lastImage = -1; 
    486507 
     
    493514 
    494515      if (lastImage != -1) { 
    495         int[] prev = (int[]) images.get(lastImage); 
     516        byte[] prev = (byte[]) images.get(lastImage); 
    496517        System.arraycopy(prev, 0, dest, 0, core.sizeX[0] * core.sizeY[0]); 
    497518      } 
     
    535556          // map color and insert in destination 
    536557          int index = ((int) pixels[sx++]) & 0xff; 
    537           dest[dx++] = act[index]; 
    538         } 
    539       } 
    540     } 
     558          dest[dx++] = (byte) index; 
     559        } 
     560      } 
     561    } 
     562    colorTables.add(act); 
    541563    images.add(dest); 
    542564  } 
  • trunk/loci/formats/in/KhorosReader.java

    r3097 r3131  
    2525package loci.formats.in; 
    2626 
    27 import java.awt.image.BufferedImage; 
     27import java.awt.image.*; 
    2828import java.io.*; 
    2929import loci.formats.*; 
     
    5858  } 
    5959 
     60  /* @see loci.formats.IFormatReader#isIndexed() */ 
     61  public boolean isIndexed() { 
     62    FormatTools.assertId(currentId, true, 1); 
     63    return lut != null; 
     64  } 
     65 
     66  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
     67  public byte[][] get8BitLookupTable() throws FormatException { 
     68    FormatTools.assertId(currentId, true, 1); 
     69    byte[][] table = new byte[3][lut.length / 3]; 
     70    int next = 0; 
     71    for (int i=0; i<table[0].length; i++) { 
     72      for (int j=0; j<table.length; j++) { 
     73        table[j][i] = lut[next++]; 
     74      } 
     75    } 
     76    return table;  
     77  } 
     78 
    6079  /* @see loci.formats.IFormatReader#openBytes(int) */ 
    6180  public byte[] openBytes(int no) throws FormatException, IOException { 
    6281    FormatTools.assertId(currentId, true, 1); 
    63     byte[] buf = new byte[core.sizeX[0] * core.sizeY[0] * core.sizeC[0] * 
    64       FormatTools.getBytesPerPixel(core.pixelType[0])]; 
     82    int bufSize = core.sizeX[0] * core.sizeY[0] * 
     83      FormatTools.getBytesPerPixel(core.pixelType[0]); 
     84    if (!isIndexed()) bufSize *= core.sizeC[0]; 
     85    byte[] buf = new byte[bufSize]; 
    6586    return openBytes(no, buf); 
    6687  } 
     
    7596    } 
    7697 
    77     in.seek(offset + 
    78       no * (core.sizeX[0] * core.sizeY[0] * getRGBChannelCount())); 
    79     if (lut == null) in.read(buf); 
    80     else { 
    81       int plane = core.sizeX[0] * core.sizeY[0] * 
    82         FormatTools.getBytesPerPixel(core.pixelType[0]); 
    83  
    84       for (int i=0; i<plane; i++) { 
    85         int ndx = in.read(); 
    86         if (ndx < 0) ndx += 256; 
    87         buf[i] = lut[ndx*3]; 
    88         buf[i + plane] = lut[ndx*3 + 1]; 
    89         buf[i + 2*plane] = lut[ndx*3 + 2]; 
    90       } 
    91     } 
    92  
     98    int bufSize = core.sizeX[0] * core.sizeY[0] * 
     99      FormatTools.getBytesPerPixel(core.pixelType[0]); 
     100    if (isIndexed()) bufSize *= core.sizeC[0]; 
     101    if (buf.length < bufSize) throw new FormatException("Buffer too small."); 
     102 
     103    in.seek(offset + no * bufSize); 
     104    in.read(buf, 0, bufSize);  
    93105    return buf; 
    94106  } 
     
    110122    } 
    111123 
    112     return ImageTools.makeImage(openBytes(no), core.sizeX[0], core.sizeY[0], 
    113       core.sizeC[0], core.interleaved[0], 
     124    BufferedImage b = ImageTools.makeImage(openBytes(no), core.sizeX[0],  
     125      core.sizeY[0], isIndexed() ? 1 : core.sizeC[0], core.interleaved[0], 
    114126      FormatTools.getBytesPerPixel(core.pixelType[0]), core.littleEndian[0]); 
     127    if (isIndexed()) { 
     128      byte[][] table = get8BitLookupTable(); 
     129      IndexedColorModel model =  
     130        new IndexedColorModel(8, table[0].length, table); 
     131      WritableRaster raster = Raster.createWritableRaster(b.getSampleModel(), 
     132        b.getData().getDataBuffer(), null); 
     133      b = new BufferedImage(model, raster, false, null);  
     134    } 
     135    return b; 
    115136  } 
    116137 
  • trunk/loci/formats/in/PerkinElmerReader.java

    r3108 r3131  
    110110    int bpp = b.length / (core.sizeX[0] * core.sizeY[0]); 
    111111    return ImageTools.makeImage(b, core.sizeX[0], core.sizeY[0], 1, 
    112       false, bpp, true); 
     112      false, bpp, core.littleEndian[0]); 
    113113  } 
    114114 
  • trunk/loci/formats/in/ZeissZVIReader.java

    r3108 r3131  
    450450      try { blackValue = new Double(black); } 
    451451      catch (NumberFormatException e) { } 
     452      catch (NullPointerException e) { } 
    452453      try { whiteValue = new Double(white); } 
    453454      catch (NumberFormatException e) { } 
     455      catch (NullPointerException e) { } 
    454456      try { gammaValue = new Float(gamma); } 
    455457      catch (NumberFormatException e) { } 
     458      catch (NullPointerException e) { } 
    456459 
    457460      store.setDisplayChannel(new Integer(i), blackValue, whiteValue, 
     
    465468      try { exp = new Float(exposure); } 
    466469      catch (NumberFormatException e) { } 
    467  
     470      catch (NullPointerException e) { } 
    468471      store.setPlaneInfo(zct[0], zct[1], zct[2], null, exp, null); 
    469472    } 
Note: See TracChangeset for help on using the changeset viewer.