Changeset 3280


Ignore:
Timestamp:
10/16/07 12:38:12 (12 years ago)
Author:
melissa
Message:

Correctly handle signed data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/plugins/Util.java

    r3217 r3280  
    9898    int bpp = FormatTools.getBytesPerPixel(type); 
    9999 
     100    boolean signed = type == FormatTools.INT8 || type == FormatTools.INT16 || 
     101      type == FormatTools.INT32; 
     102 
    100103    if (b.length != w * h * c * bpp && b.length != w * h * bpp) { 
    101104      // HACK - byte array dimensions are incorrect - image is probably 
     
    135138        System.arraycopy(tmp, 0, q, 0, q.length); 
    136139      } 
     140 
     141      if (signed) { 
     142        for (int i=0; i<q.length; i++) { 
     143          q[i] = (byte) (q[i] - 128); 
     144        } 
     145      } 
     146 
    137147      ip = new ByteProcessor(w, h, q, null); 
    138148      if (cm != null) ip.setColorModel(cm); 
     
    145155        System.arraycopy(tmp, 0, q, 0, q.length); 
    146156      } 
     157 
     158      if (signed) { 
     159        for (int i=0; i<q.length; i++) { 
     160          q[i] = (short) (q[i] - 32768); 
     161        } 
     162      } 
     163 
    147164      ip = new ShortProcessor(w, h, q, model); 
    148165    } 
     
    154171        System.arraycopy(tmp, 0, q, 0, q.length); 
    155172      } 
     173 
     174      if (signed) { 
     175        for (int i=0; i<q.length; i++) { 
     176          q[i] = (int) (q[i] - 2147483648L); 
     177        } 
     178      } 
     179 
    156180      ip = new FloatProcessor(w, h, q); 
    157181    } 
Note: See TracChangeset for help on using the changeset viewer.