Changeset 1440


Ignore:
Timestamp:
09/07/06 13:56:49 (14 years ago)
Author:
melissa
Message:
  • fixed bug in DataTools.stripString
  • added LZO support to Compression
  • tweaked OMEXMLReader to construct the internal metadata store from a file
Location:
trunk/loci/formats
Files:
3 edited

Legend:

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

    r1401 r1440  
    4444  protected static final int EOI_CODE = 257; 
    4545 
    46   // ThunderScan compression codes 
    47   protected static final int DATA = 0x3f; 
    48   protected static final int CODE = 0xc0; 
    49   protected static final int RUN = 0x00; 
    50   protected static final int TWO_BIT_DELTAS = 0x40; 
    51   protected static final int SKIP_TWO = 2; 
    52   protected static final int THREE_BIT_DELTAS = 0x80; 
    53   protected static final int SKIP_THREE = 4; 
    54   protected static final int RAW = 0xc0; 
     46  // LZO compression codes 
     47  private static final int LZO_OVERRUN = -6; 
    5548 
    5649  // Base64 alphabet and codes 
     
    226219 
    227220  // -- Decompression methods -- 
     221 
     222  /**  
     223   * Decodes an LZO-compressed array.  
     224   * Adapted from LZO for Java, available at  
     225   * http://www.oberhumer.com/opensource/lzo/ 
     226   */ 
     227  public static void lzoUncompress(byte[] src, int size, byte[] dst)  
     228    throws FormatException 
     229  { 
     230    int ip = 0; 
     231    int op = 0; 
     232    int t = src[ip++] & 0xff; 
     233    int mPos; 
     234 
     235    if (t > 17) { 
     236      t -= 17; 
     237      do dst[op++] = src[ip++]; while (--t > 0); 
     238      t = src[ip++] & 0xff; 
     239      if (t < 16) return; 
     240    } 
     241 
     242    loop: 
     243      for (; ; t = src[ip++] & 0xff) { 
     244        if (t < 16) { 
     245          if (t == 0) { 
     246            while (src[ip] == 0) { 
     247              t += 255; 
     248              ip++; 
     249            } 
     250            t += 15 + (src[ip++] & 0xff); 
     251          } 
     252          t += 3; 
     253          do dst[op++] = src[ip++]; while (--t > 0); 
     254          t = src[ip++] & 0xff; 
     255          if (t < 16) { 
     256            mPos = op - 0x801 - (t >> 2) - ((src[ip++] & 0xff) << 2); 
     257            if (mPos < 0) { 
     258              t = LZO_OVERRUN; 
     259              break loop; 
     260            } 
     261            t = 3; 
     262            do dst[op++] = dst[mPos++]; while (--t > 0); 
     263            t = src[ip - 2] & 3; 
     264            if (t == 0) continue; 
     265            do dst[op++] = src[ip++]; while (--t > 0); 
     266            t = src[ip++] & 0xff; 
     267          } 
     268        } 
     269        for (; ; t = src[ip++] & 0xff) { 
     270          if (t >= 64) { 
     271            mPos = op - 1 - ((t >> 2) & 7) - ((src[ip++] & 0xff) << 3); 
     272            t = (t >> 5) - 1; 
     273          } 
     274          else if (t >= 32) { 
     275            t &= 31; 
     276            if (t == 0) { 
     277              while (src[ip] == 0) { 
     278                t += 255; 
     279                ip++; 
     280              } 
     281              t += 31 + (src[ip++] & 0xff); 
     282            } 
     283            mPos = op - 1 - ((src[ip++] & 0xff) >> 2); 
     284            mPos -= ((src[ip++] & 0xff) << 6); 
     285          } 
     286          else if (t >= 16) { 
     287            mPos = op - ((t & 8) << 11); 
     288            t &= 7; 
     289            if (t == 0) { 
     290              while (src[ip] == 0) { 
     291                t += 255; 
     292                ip++; 
     293              } 
     294              t += 7 + (src[ip++] & 0xff); 
     295            } 
     296            mPos -= ((src[ip++] & 0xff) >> 2); 
     297            mPos -= ((src[ip++] & 0xff) << 6); 
     298            if (mPos == op) break loop; 
     299            mPos -= 0x4000; 
     300          }     
     301          else { 
     302            mPos = op - 1 - (t >> 2) - ((src[ip++] & 0xff) << 2); 
     303            t = 0; 
     304          } 
     305 
     306          if (mPos < 0) { 
     307            t = LZO_OVERRUN; 
     308            break loop; 
     309          } 
     310 
     311          t += 2; 
     312          do dst[op++] = dst[mPos++]; while (--t > 0); 
     313          t = src[ip - 2] & 3; 
     314          if (t == 0) break; 
     315          do dst[op++] = src[ip++]; while (--t > 0); 
     316        } 
     317         
     318      } 
     319  } 
    228320 
    229321  /** Decodes an Adobe Deflate (Zip) compressed image strip. */ 
  • trunk/loci/formats/DataTools.java

    r1401 r1440  
    412412    int counter = 0; 
    413413    for (int i=0; i<toRtn.length; i++) { 
    414       if ((toStrip.charAt(i) != 0) && (toStrip.charAt(i) != ' ')) { 
     414      if (toStrip.charAt(i) != 0) { 
    415415        toRtn[counter] = toStrip.charAt(i); 
    416416        counter++; 
  • trunk/loci/formats/in/OMEXMLReader.java

    r1393 r1440  
    3131import java.util.zip.*; 
    3232import loci.formats.*; 
     33import org.openmicroscopy.xml.OMENode; 
    3334 
    3435/** 
     
    394395    } 
    395396 
    396     internalStore.createRoot(xml); 
     397    try { 
     398      internalStore.setRoot(new OMENode(new File(id))); 
     399    } 
     400    catch (Exception e) { 
     401      throw new FormatException("Failed to create metadata store."); 
     402    } 
    397403 
    398404    width = new int[numDatasets]; 
Note: See TracChangeset for help on using the changeset viewer.