Changeset 2316


Ignore:
Timestamp:
02/22/07 15:48:08 (13 years ago)
Author:
curtis
Message:

Force output pixels files to be in XYZCT order, as expected by OMEIS.

File:
1 edited

Legend:

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

    r2178 r2316  
    258258      } 
    259259      boolean little = reader.isLittleEndian(id); 
    260       boolean swap = doLittle != little; 
     260      boolean swap = doLittle != little && bytesPerPixel > 1 && !isFloat; 
    261261 
    262262      // ask OMEIS to allocate new pixels file 
     
    275275          ", sizeC=" + sizeC + ", sizeT=" + sizeT + "): "); 
    276276      } 
    277       for (int j=0; j<imageCount; j++) { 
    278         if (DEBUG) log("  Reading plane #" + j); 
    279         byte[] plane = reader.openBytes(id, j); 
    280         if (swap && bytesPerPixel > 1 && !isFloat) { // swap endianness 
    281           for (int b=0; b<plane.length; b+=bytesPerPixel) { 
    282             for (int k=0; k<bytesPerPixel/2; k++) { 
    283               int i1 = b + k; 
    284               int i2 = b + bytesPerPixel - k - 1; 
    285               byte b1 = plane[i1]; 
    286               byte b2 = plane[i2]; 
    287               plane[i1] = b2; 
    288               plane[i2] = b1; 
     277      // OMEIS expects XYZCT order -- 
     278      // interleaved RGB files will be handled a bit more slowly due to this 
     279      // ordering (ChannelSeparator must read each plane three times), but 
     280      // caching performed by the OS helps some 
     281      for (int t=0; t<sizeT; t++) { 
     282        for (int c=0; c<sizeC; c++) { 
     283          for (int z=0; z<sizeZ; z++) { 
     284            int ndx = reader.getIndex(id, z, c, t); 
     285            if (DEBUG) { 
     286              log("Reading plane #" + ndx + 
     287                ": z=" + z + ", c=" + c + ", t=" + t); 
    289288            } 
     289            byte[] plane = reader.openBytes(id, ndx); 
     290            if (swap) { // swap endianness 
     291              for (int b=0; b<plane.length; b+=bytesPerPixel) { 
     292                for (int k=0; k<bytesPerPixel/2; k++) { 
     293                  int i1 = b + k; 
     294                  int i2 = b + bytesPerPixel - k - 1; 
     295                  byte b1 = plane[i1]; 
     296                  byte b2 = plane[i2]; 
     297                  plane[i1] = b2; 
     298                  plane[i2] = b1; 
     299                } 
     300              } 
     301            } 
     302            out.write(plane); 
    290303          } 
    291304        } 
    292         out.write(plane); 
    293305      } 
    294306      out.close(); 
     
    308320      pixels.setAttribute("FileSHA1", sha1); 
    309321      pixels.setAttribute("ImageServerID", "" + pixelsId); 
     322      pixels.setAttribute("DimensionOrder", "XYZCT"); // ignored anyway 
    310323      if (DEBUG) log("Pixel attributes injected."); 
    311324    } 
     
    511524 
    512525  private void log(String msg) { 
    513     System.err.println(msg); 
     526    System.err.println("Bio-Formats: " + msg); 
    514527  } 
    515528 
Note: See TracChangeset for help on using the changeset viewer.