Changeset 4686


Ignore:
Timestamp:
12/10/08 10:45:10 (11 years ago)
Author:
melissa
Message:
  • Fixed SignedColorModel to better handle two-channel data.
  • Don't pad two-channel data to three channels when exporting to TIFF.
Location:
trunk/components/bio-formats/src/loci/formats
Files:
3 edited

Legend:

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

    r4607 r4686  
    9797  } 
    9898 
     99  /* @see java.awt.image.ColorModel#getAlpha(Object) */ 
     100  public int getAlpha(Object data) { 
     101    int max = (int) Math.pow(2, pixelBits) - 1; 
     102    if (data instanceof byte[]) { 
     103      byte[] b = (byte[]) data; 
     104      if (b.length == 1) return getAlpha(b[0]); 
     105      return rescale(b.length == 4 ? b[0] : max, max); 
     106    } 
     107    else if (data instanceof short[]) { 
     108      short[] s = (short[]) data; 
     109      if (s.length == 1) return getAlpha(s[0]); 
     110      return rescale(s.length == 4 ? s[0] : max, max); 
     111    } 
     112    else if (data instanceof int[]) { 
     113      int[] i = (int[]) data; 
     114      if (i.length == 1) return getAlpha(i[0]); 
     115      return rescale(i.length == 4 ? i[0] : max, max); 
     116    } 
     117    return 0; 
     118  } 
     119 
     120  /* @see java.awt.image.ColorModel#getRed(Object) */ 
     121  public int getRed(Object data) { 
     122    int max = (int) Math.pow(2, pixelBits) - 1; 
     123    if (data instanceof byte[]) { 
     124      byte[] b = (byte[]) data; 
     125      if (b.length == 1) return getRed(b[0]); 
     126      return rescale(b.length != 4 ? b[0] : b[1]); 
     127    } 
     128    else if (data instanceof short[]) { 
     129      short[] s = (short[]) data; 
     130      if (s.length == 1) return getRed(s[0]); 
     131      return rescale(s.length != 4 ? s[0] : s[1], max); 
     132    } 
     133    else if (data instanceof int[]) { 
     134      int[] i = (int[]) data; 
     135      if (i.length == 1) return getRed(i[0]); 
     136      return rescale(i.length != 4 ? i[0] : i[1], max); 
     137    } 
     138    return 0; 
     139  } 
     140 
     141  /* @see java.awt.image.ColorModel#getGreen(Object) */ 
     142  public int getGreen(Object data) { 
     143    int max = (int) Math.pow(2, pixelBits) - 1; 
     144    if (data instanceof byte[]) { 
     145      byte[] b = (byte[]) data; 
     146      if (b.length == 1) return getGreen(b[0]); 
     147      return rescale(b.length != 4 ? b[1] : b[2]); 
     148    } 
     149    else if (data instanceof short[]) { 
     150      short[] s = (short[]) data; 
     151      if (s.length == 1) return getGreen(s[0]); 
     152      return rescale(s.length != 4 ? s[1] : s[2], max); 
     153    } 
     154    else if (data instanceof int[]) { 
     155      int[] i = (int[]) data; 
     156      if (i.length == 1) return getGreen(i[0]); 
     157      return rescale(i.length != 4 ? i[1] : i[2], max); 
     158    } 
     159    return 0; 
     160  } 
     161 
     162  /* @see java.awt.image.ColorModel#getBlue(Object) */ 
     163  public int getBlue(Object data) { 
     164    int max = (int) Math.pow(2, pixelBits) - 1; 
     165    if (data instanceof byte[]) { 
     166      byte[] b = (byte[]) data; 
     167      if (b.length == 1) return getBlue(b[0]); 
     168      return rescale(b.length > 2 ? b[b.length - 1] : 0); 
     169    } 
     170    else if (data instanceof short[]) { 
     171      short[] s = (short[]) data; 
     172      if (s.length == 1) return getBlue(s[0]); 
     173      return rescale(s.length > 2 ? s[s.length - 1] : 0, max); 
     174    } 
     175    else if (data instanceof int[]) { 
     176      int[] i = (int[]) data; 
     177      if (i.length == 1) return getBlue(i[0]); 
     178      return rescale(i.length > 2 ? i[i.length - 1] : 0, max); 
     179    } 
     180    return 0; 
     181  } 
     182 
    99183  // -- Helper methods -- 
     184 
     185  private int rescale(int value, int max) { 
     186    float v = (float) value / (float) max; 
     187    v *= 255; 
     188    return rescale((int) v); 
     189  } 
    100190 
    101191  private int rescale(int value) { 
  • trunk/components/bio-formats/src/loci/formats/TiffTools.java

    r4681 r4686  
    475475      Object value = null; 
    476476 
     477      if (type < 0 || type >= BYTES_PER_ELEMENT.length) { 
     478        // invalid data 
     479        return null; 
     480      } 
     481 
    477482      if (count > threshhold / BYTES_PER_ELEMENT[type]) { 
    478483        long pointer = bigTiff ? in.readLong() : 
     
    22232228    int height = img.getHeight(); 
    22242229 
    2225     if (values.length == 2) { 
    2226       // pad values with extra set of zeroes 
    2227       values = new byte[][] { 
    2228         values[0], values[1], new byte[values[0].length] 
    2229       }; 
    2230     } 
    2231  
    22322230    int bytesPerPixel = values[0].length / (width * height); 
    22332231 
  • trunk/components/bio-formats/src/loci/formats/in/OMETiffReader.java

    r4524 r4686  
    201201        String order = meta.getPixelsDimensionOrder(i, p); 
    202202        int effSizeC = meta.getPixelsSizeC(i, p).intValue() / samples; 
     203        if (effSizeC == 0) effSizeC = 1; 
    203204        int sizeT = meta.getPixelsSizeT(i, p).intValue(); 
    204205        int sizeZ = meta.getPixelsSizeZ(i, p).intValue(); 
Note: See TracChangeset for help on using the changeset viewer.