Changeset 6140


Ignore:
Timestamp:
04/19/10 14:53:27 (10 years ago)
Author:
melissa
Message:

Updated more readers to respect MetadataOptions.

Location:
trunk/components/bio-formats/src/loci/formats/in
Files:
4 edited

Legend:

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

    r6026 r6140  
    5252  public static final String OPENLAB_RAW_MAGIC_STRING = "OLRW"; 
    5353 
     54  private static final int HEADER_SIZE = 288; 
     55 
    5456  // -- Fields -- 
    5557 
     
    8688    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    8789 
    88     in.seek(offsets[no / getSizeC()] + 288); 
     90    in.seek(offsets[no / getSizeC()] + HEADER_SIZE); 
    8991    readPlane(in, x, y, w, h, buf); 
    9092 
     
    124126    LOGGER.info("Populating metadata"); 
    125127 
    126     addGlobalMeta("Version", in.readInt()); 
     128    int version = in.readInt(); 
    127129 
    128130    core[0].imageCount = in.readInt(); 
     
    146148 
    147149    String stamp = DateTools.convertDate(stampMs, DateTools.UNIX); 
    148     addGlobalMeta("Timestamp", stamp); 
    149150 
    150151    in.skipBytes(4); 
    151152    int len = in.read() & 0xff; 
    152     addGlobalMeta("Image name", in.readString(len - 1).trim()); 
     153    String imageName = in.readString(len - 1).trim(); 
    153154 
    154155    if (getSizeC() <= 1) core[0].sizeC = 1; 
    155156    else core[0].sizeC = 3; 
    156     addGlobalMeta("Width", getSizeX()); 
    157     addGlobalMeta("Height", getSizeY()); 
    158     addGlobalMeta("Bytes per pixel", bytesPerPixel); 
    159157 
    160158    int plane = getSizeX() * getSizeY() * bytesPerPixel; 
    161159    for (int i=1; i<getImageCount(); i++) { 
    162       offsets[i] = offsets[i - 1] + 288 + plane; 
     160      offsets[i] = offsets[i - 1] + HEADER_SIZE + plane; 
    163161    } 
    164162 
    165163    core[0].sizeZ = getImageCount(); 
    166164    core[0].sizeT = 1; 
    167     core[0].dimensionOrder = "XYZTC"; 
    168165    core[0].rgb = getSizeC() > 1; 
     166    core[0].dimensionOrder = isRGB() ? "XYCZT" : "XYZTC"; 
    169167    core[0].interleaved = false; 
    170168    core[0].littleEndian = false; 
     
    185183    } 
    186184 
     185    addGlobalMeta("Width", getSizeX()); 
     186    addGlobalMeta("Height", getSizeY()); 
     187    addGlobalMeta("Bytes per pixel", bytesPerPixel); 
     188    addGlobalMeta("Image name", imageName); 
     189    addGlobalMeta("Timestamp", stamp); 
     190    addGlobalMeta("Version", version); 
     191 
    187192    // The metadata store we're working with. 
    188193    MetadataStore store = 
     
    190195    MetadataTools.populatePixels(store, this); 
    191196    store.setImageCreationDate(stamp, 0); 
     197    store.setImageName(imageName, 0); 
    192198  } 
    193199 
  • trunk/components/bio-formats/src/loci/formats/in/OpenlabReader.java

    r6042 r6140  
    130130  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
    131131  public byte[][] get8BitLookupTable() { 
    132     byte[][] lut = luts.get(planeOffsets[series][lastPlane]); 
    133     if (lut == null) return null; 
    134     return lut; 
     132    return luts.get(planeOffsets[series][lastPlane]); 
    135133  } 
    136134 
     
    425423        imagesFound++; 
    426424      } 
    427       else if (tag == CALIBRATION) { 
    428         in.skipBytes(4); 
    429         short units = in.readShort(); 
    430         in.skipBytes(12); 
    431  
    432         xcal = in.readFloat(); 
    433         ycal = in.readFloat(); 
    434  
    435         float scaling = units == 3 ? 0.001f : 1.0f; 
    436  
    437         xcal *= scaling; 
    438         ycal *= scaling; 
    439       } 
    440       else if (tag == USER) { 
    441         String className = in.readCString(); 
    442  
    443         if (className.equals("CVariableList")) { 
    444           char achar = in.readChar(); 
    445  
    446           if (achar == 1) { 
    447             int numVars = in.readShort(); 
    448             for (int i=0; i<numVars; i++) { 
    449               className = in.readCString(); 
    450  
    451               String name = "", value = ""; 
    452  
    453               int derivedClassVersion = in.read(); 
    454               if (derivedClassVersion != 1) { 
    455                 throw new FormatException("Invalid revision"); 
     425      else if (getMetadataOptions().getMetadataLevel() == MetadataLevel.ALL) { 
     426        if (tag == CALIBRATION) { 
     427          in.skipBytes(4); 
     428          short units = in.readShort(); 
     429          float scaling = units == 3 ? 0.001f : 1.0f; 
     430          in.skipBytes(12); 
     431 
     432          xcal = in.readFloat() * scaling; 
     433          ycal = in.readFloat() * scaling; 
     434        } 
     435        else if (tag == USER) { 
     436          String className = in.readCString(); 
     437 
     438          if (className.equals("CVariableList")) { 
     439            char achar = in.readChar(); 
     440 
     441            if (achar == 1) { 
     442              int numVars = in.readShort(); 
     443              for (int i=0; i<numVars; i++) { 
     444                readVariable(); 
    456445              } 
    457  
    458               if (className.equals("CStringVariable")) { 
    459                 int strSize = in.readInt(); 
    460                 value = in.readString(strSize); 
    461                 in.skipBytes(1); 
    462               } 
    463               else if (className.equals("CFloatVariable")) { 
    464                 value = String.valueOf(in.readDouble()); 
    465               } 
    466  
    467               int baseClassVersion = in.read(); 
    468               if (baseClassVersion == 1 || baseClassVersion == 2) { 
    469                 int strSize = in.readInt(); 
    470                 name = in.readString(strSize); 
    471                 in.skipBytes(baseClassVersion * 2 + 1); 
    472               } 
    473               else { 
    474                 throw new FormatException("Invalid revision: " + 
    475                   baseClassVersion); 
    476               } 
    477  
    478               addGlobalMeta(name, value); 
    479  
    480               if (name.equals("Gain")) gain = value; 
    481               else if (name.equals("Offset")) detectorOffset = value; 
    482               else if (name.equals("X-Y Stage: X Position")) xPos = value; 
    483               else if (name.equals("X-Y Stage: Y Position")) yPos = value; 
    484               else if (name.equals("ZPosition")) zPos = value; 
    485446            } 
    486447          } 
     
    525486      core[i].sizeY = planes[planeOffsets[i][0]].height; 
    526487      core[i].imageCount = planeOffsets[i].length; 
     488      core[i].sizeC = 1; 
    527489 
    528490      switch (planes[planeOffsets[i][0]].volumeType) { 
     
    531493        case MAC_256_GREYS: 
    532494          core[i].pixelType = FormatTools.UINT8; 
    533           core[i].rgb = false; 
    534           core[i].sizeC = 1; 
    535           core[i].interleaved = false; 
    536495          core[i].indexed = planes[planeOffsets[i][0]].pict; 
    537496          break; 
    538497        case MAC_256_COLORS: 
    539498          core[i].pixelType = FormatTools.UINT8; 
    540           core[i].rgb = false; 
    541           core[i].sizeC = 1; 
    542           core[i].interleaved = false; 
    543499          core[i].indexed = true; 
    544500          break; 
     
    547503        case MAC_24_BIT_COLOR: 
    548504          core[i].pixelType = FormatTools.UINT8; 
    549           core[i].rgb = true; 
    550505          core[i].sizeC = 3; 
    551           core[i].interleaved = version == 5; 
    552506          break; 
    553507        case DEEP_GREY_9: 
    554508          core[i].bitsPerPixel = 9; 
    555           core[i].pixelType = FormatTools.UINT16; 
    556           core[i].rgb = false; 
    557           core[i].sizeC = 1; 
    558           core[i].interleaved = false; 
    559509          break; 
    560510        case DEEP_GREY_10: 
    561511          core[i].bitsPerPixel = 10; 
    562           core[i].pixelType = FormatTools.UINT16; 
    563           core[i].rgb = false; 
    564           core[i].sizeC = 1; 
    565           core[i].interleaved = false; 
    566512          break; 
    567513        case DEEP_GREY_11: 
    568514          core[i].bitsPerPixel = 11; 
    569           core[i].pixelType = FormatTools.UINT16; 
    570           core[i].rgb = false; 
    571           core[i].sizeC = 1; 
    572           core[i].interleaved = false; 
    573515          break; 
    574516        case DEEP_GREY_12: 
    575517          core[i].bitsPerPixel = 12; 
    576           core[i].pixelType = FormatTools.UINT16; 
    577           core[i].rgb = false; 
    578           core[i].sizeC = 1; 
    579           core[i].interleaved = false; 
    580518          break; 
    581519        case DEEP_GREY_13: 
    582520          core[i].bitsPerPixel = 13; 
    583           core[i].pixelType = FormatTools.UINT16; 
    584           core[i].rgb = false; 
    585           core[i].sizeC = 1; 
    586           core[i].interleaved = false; 
    587521          break; 
    588522        case DEEP_GREY_14: 
    589523          core[i].bitsPerPixel = 14; 
    590           core[i].pixelType = FormatTools.UINT16; 
    591           core[i].rgb = false; 
    592           core[i].sizeC = 1; 
    593           core[i].interleaved = false; 
    594524          break; 
    595525        case DEEP_GREY_15: 
    596526          core[i].bitsPerPixel = 15; 
    597           core[i].pixelType = FormatTools.UINT16; 
    598           core[i].rgb = false; 
    599           core[i].sizeC = 1; 
    600           core[i].interleaved = false; 
    601527          break; 
    602528        case MAC_16_GREYS: 
    603529        case DEEP_GREY_16: 
    604530          core[i].pixelType = FormatTools.UINT16; 
    605           core[i].rgb = false; 
    606           core[i].sizeC = 1; 
    607           core[i].interleaved = false; 
    608531          break; 
    609532        default: 
     
    612535      } 
    613536 
     537      if (getBitsPerPixel() > 8) core[i].pixelType = FormatTools.UINT16; 
     538      core[i].rgb = getSizeC() > 1; 
     539      core[i].interleaved = isRGB() && version == 5; 
    614540      core[i].sizeT = 1; 
    615541      core[i].sizeZ = core[i].imageCount; 
     
    618544      core[i].falseColor = false; 
    619545      core[i].metadataComplete = true; 
    620       //core[i].seriesMetadata = getMetadata(); 
    621     } 
    622  
     546    } 
     547 
     548    for (int s=0; s<getSeriesCount(); s++) { 
     549      parseImageNames(s); 
     550    } 
     551 
     552    MetadataStore store = 
     553      new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
     554 
     555    MetadataLevel level = getMetadataOptions().getMetadataLevel(); 
     556    boolean planeInfoNeeded = level == MetadataLevel.ALL && 
     557      (xPos != null || yPos != null || zPos != null); 
     558 
     559    MetadataTools.populatePixels(store, this, planeInfoNeeded); 
     560    MetadataTools.setDefaultCreationDate(store, currentId, 0); 
     561 
     562    if (level == MetadataLevel.ALL) { 
     563      // populate MetadataStore 
     564 
     565      store.setDimensionsPhysicalSizeX(new Double(xcal), 0, 0); 
     566      store.setDimensionsPhysicalSizeY(new Double(ycal), 0, 0); 
     567 
     568      // link Instrument and Image 
     569      String instrumentID = MetadataTools.createLSID("Instrument", 0); 
     570      store.setInstrumentID(instrumentID, 0); 
     571      store.setImageInstrumentRef(instrumentID, 0); 
     572 
     573      try { 
     574        if (gain != null) store.setDetectorSettingsGain(new Double(gain), 0, 0); 
     575      } 
     576      catch (NumberFormatException e) { } 
     577      try { 
     578        if (detectorOffset != null) { 
     579          store.setDetectorSettingsOffset(new Double(detectorOffset), 0, 0); 
     580        } 
     581      } 
     582      catch (NumberFormatException e) { } 
     583 
     584      // link DetectorSettings to an actual Detector 
     585      String detectorID = MetadataTools.createLSID("Detector", 0, 0); 
     586      store.setDetectorID(detectorID, 0, 0); 
     587      store.setDetectorSettingsDetector(detectorID, 0, 0); 
     588 
     589      store.setDetectorType("Unknown", 0, 0); 
     590 
     591      Double stageX = xPos == null ? null : new Double(xPos); 
     592      Double stageY = yPos == null ? null : new Double(yPos); 
     593      Double stageZ = zPos == null ? null : new Double(zPos); 
     594 
     595      for (int series=0; series<getSeriesCount(); series++) { 
     596        setSeries(series); 
     597        for (int plane=0; plane<getImageCount(); plane++) { 
     598          if (stageX != null) { 
     599            store.setStagePositionPositionX(stageX, series, 0, plane); 
     600          } 
     601          if (stageY != null) { 
     602            store.setStagePositionPositionY(stageY, series, 0, plane); 
     603          } 
     604          if (stageZ != null) { 
     605            store.setStagePositionPositionZ(stageZ, series, 0, plane); 
     606          } 
     607        } 
     608      } 
     609    } 
     610    setSeries(0); 
     611  } 
     612 
     613  // -- Helper methods -- 
     614 
     615  /** Read the next tag. */ 
     616  private void readTagHeader() throws IOException { 
     617    tag = in.readShort(); 
     618    subTag = in.readShort(); 
     619 
     620    nextTag = (version == 2 ? in.readInt() : in.readLong()); 
     621 
     622    fmt = in.readString(4); 
     623    in.skipBytes(version == 2 ? 4 : 8); 
     624  } 
     625 
     626  private void readVariable() throws FormatException, IOException { 
     627    String className = in.readCString(); 
     628 
     629    String name = "", value = ""; 
     630 
     631    int derivedClassVersion = in.read(); 
     632    if (derivedClassVersion != 1) { 
     633      throw new FormatException("Invalid revision"); 
     634    } 
     635 
     636    if (className.equals("CStringVariable")) { 
     637      int strSize = in.readInt(); 
     638      value = in.readString(strSize); 
     639      in.skipBytes(1); 
     640    } 
     641    else if (className.equals("CFloatVariable")) { 
     642      value = String.valueOf(in.readDouble()); 
     643    } 
     644 
     645    int baseClassVersion = in.read(); 
     646    if (baseClassVersion == 1 || baseClassVersion == 2) { 
     647      int strSize = in.readInt(); 
     648      name = in.readString(strSize); 
     649      in.skipBytes(baseClassVersion * 2 + 1); 
     650    } 
     651    else { 
     652      throw new FormatException("Invalid revision: " + baseClassVersion); 
     653    } 
     654 
     655    addGlobalMeta(name, value); 
     656 
     657    if (name.equals("Gain")) gain = value; 
     658    else if (name.equals("Offset")) detectorOffset = value; 
     659    else if (name.equals("X-Y Stage: X Position")) xPos = value; 
     660    else if (name.equals("X-Y Stage: Y Position")) yPos = value; 
     661    else if (name.equals("ZPosition")) zPos = value; 
     662  } 
     663 
     664  private void parseImageNames(int s) { 
    623665    Vector<String> uniqueT = new Vector<String>(); 
    624666    Vector<String> uniqueC = new Vector<String>(); 
     
    626668    String[] axes = new String[] {"Z", "C", "T"}; 
    627669 
    628     for (int s=0; s<getSeriesCount(); s++) { 
    629       core[s].dimensionOrder = "XY"; 
    630       uniqueT.clear(); 
    631       uniqueC.clear(); 
    632       uniqueZ.clear(); 
    633       for (PlaneInfo plane : planes) { 
    634         if (plane == null) continue; 
    635         if (plane.series == s) { 
    636           String name = plane.planeName; 
    637           for (String axis : axes) { 
    638             Vector<String> unique = null; 
    639             if (axis.equals("Z")) unique = uniqueZ; 
    640             else if (axis.equals("C")) unique = uniqueC; 
    641             else if (axis.equals("T")) unique = uniqueT; 
    642  
    643             int index = name.indexOf(axis + "="); 
    644             if (index == -1) index = name.indexOf(axis + " ="); 
    645             if (index != -1) { 
    646               int nextEqual = name.indexOf("=", index + 3); 
    647               if (nextEqual < 0) { 
    648                 nextEqual = (int) Math.min(index + 3, name.length()); 
    649               } 
    650               int end = name.lastIndexOf(" ", nextEqual); 
    651               if (end < index) end = name.length(); 
    652  
    653               String i = name.substring(name.indexOf("=", index), end); 
    654               if (!unique.contains(i)) { 
    655                 unique.add(i); 
    656                 if (unique.size() > 1 && 
    657                   core[s].dimensionOrder.indexOf(axis) == -1) 
    658                 { 
    659                   core[s].dimensionOrder += axis; 
    660                 } 
     670    core[s].dimensionOrder = "XY"; 
     671    for (PlaneInfo plane : planes) { 
     672      if (plane == null) continue; 
     673      if (plane.series == s) { 
     674        String name = plane.planeName; 
     675        for (String axis : axes) { 
     676          Vector<String> unique = null; 
     677          if (axis.equals("Z")) unique = uniqueZ; 
     678          else if (axis.equals("C")) unique = uniqueC; 
     679          else if (axis.equals("T")) unique = uniqueT; 
     680 
     681          int index = name.indexOf(axis + "="); 
     682          if (index == -1) index = name.indexOf(axis + " ="); 
     683          if (index != -1) { 
     684            int nextEqual = name.indexOf("=", index + 3); 
     685            if (nextEqual < 0) { 
     686              nextEqual = (int) Math.min(index + 3, name.length()); 
     687            } 
     688            int end = name.lastIndexOf(" ", nextEqual); 
     689            if (end < index) end = name.length(); 
     690 
     691            String i = name.substring(name.indexOf("=", index), end); 
     692            if (!unique.contains(i)) { 
     693              unique.add(i); 
     694              if (unique.size() > 1 && 
     695                core[s].dimensionOrder.indexOf(axis) == -1) 
     696              { 
     697                core[s].dimensionOrder += axis; 
    661698              } 
    662699            } 
     
    664701        } 
    665702      } 
    666  
    667       for (String axis : axes) { 
    668         if (core[s].dimensionOrder.indexOf(axis) == -1) { 
    669           core[s].dimensionOrder += axis; 
    670         } 
    671       } 
    672       if (uniqueC.size() > 1) { 
    673         core[s].sizeC *= uniqueC.size(); 
    674         core[s].sizeZ /= uniqueC.size(); 
    675       } 
    676       if (uniqueT.size() > 1) { 
    677         core[s].sizeT = uniqueT.size(); 
    678         core[s].sizeZ /= core[s].sizeT; 
    679       } 
    680     } 
    681  
    682     MetadataStore store = 
    683       new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
    684  
    685     boolean planeInfoNeeded = xPos != null || yPos != null || zPos != null; 
    686  
    687     MetadataTools.populatePixels(store, this, planeInfoNeeded); 
    688     MetadataTools.setDefaultCreationDate(store, currentId, 0); 
    689  
    690     // populate MetadataStore 
    691  
    692     store.setDimensionsPhysicalSizeX(new Double(xcal), 0, 0); 
    693     store.setDimensionsPhysicalSizeY(new Double(ycal), 0, 0); 
    694  
    695     // link Instrument and Image 
    696     String instrumentID = MetadataTools.createLSID("Instrument", 0); 
    697     store.setInstrumentID(instrumentID, 0); 
    698     store.setImageInstrumentRef(instrumentID, 0); 
    699  
    700     try { 
    701       if (gain != null) store.setDetectorSettingsGain(new Double(gain), 0, 0); 
    702     } 
    703     catch (NumberFormatException e) { } 
    704     try { 
    705       if (detectorOffset != null) { 
    706         store.setDetectorSettingsOffset(new Double(detectorOffset), 0, 0); 
    707       } 
    708     } 
    709     catch (NumberFormatException e) { } 
    710  
    711     // link DetectorSettings to an actual Detector 
    712     String detectorID = MetadataTools.createLSID("Detector", 0, 0); 
    713     store.setDetectorID(detectorID, 0, 0); 
    714     store.setDetectorSettingsDetector(detectorID, 0, 0); 
    715  
    716     store.setDetectorType("Unknown", 0, 0); 
    717  
    718     Double stageX = xPos == null ? null : new Double(xPos); 
    719     Double stageY = yPos == null ? null : new Double(yPos); 
    720     Double stageZ = zPos == null ? null : new Double(zPos); 
    721  
    722     for (int series=0; series<getSeriesCount(); series++) { 
    723       setSeries(series); 
    724       for (int plane=0; plane<getImageCount(); plane++) { 
    725         if (stageX != null) { 
    726           store.setStagePositionPositionX(stageX, series, 0, plane); 
    727         } 
    728         if (stageY != null) { 
    729           store.setStagePositionPositionY(stageY, series, 0, plane); 
    730         } 
    731         if (stageZ != null) { 
    732           store.setStagePositionPositionZ(stageZ, series, 0, plane); 
    733         } 
    734       } 
    735     } 
    736     setSeries(0); 
    737   } 
    738  
    739   // -- Helper methods -- 
    740  
    741   /** Read the next tag. */ 
    742   private void readTagHeader() throws IOException { 
    743     tag = in.readShort(); 
    744     subTag = in.readShort(); 
    745  
    746     nextTag = (version == 2 ? in.readInt() : in.readLong()); 
    747  
    748     fmt = in.readString(4); 
    749     in.skipBytes(version == 2 ? 4 : 8); 
     703    } 
     704 
     705    for (String axis : axes) { 
     706      if (core[s].dimensionOrder.indexOf(axis) == -1) { 
     707        core[s].dimensionOrder += axis; 
     708      } 
     709    } 
     710    if (uniqueC.size() > 1) { 
     711      core[s].sizeC *= uniqueC.size(); 
     712      core[s].sizeZ /= uniqueC.size(); 
     713    } 
     714    if (uniqueT.size() > 1) { 
     715      core[s].sizeT = uniqueT.size(); 
     716      core[s].sizeZ /= core[s].sizeT; 
     717    } 
    750718  } 
    751719 
  • trunk/components/bio-formats/src/loci/formats/in/PCXReader.java

    r6026 r6140  
    133133 
    134134    core[0].littleEndian = true; 
    135     in.order(true); 
     135    in.order(isLittleEndian()); 
    136136    in.seek(1); 
    137137    int version = in.read(); 
     
    146146    core[0].sizeY = yMax - yMin; 
    147147 
    148     int vertDPI = in.readShort(); 
    149     int horizDPI = version == 5 ? in.readShort() : 1; 
    150  
    151     in.skipBytes(49); 
     148    in.skipBytes(version == 5 ? 53 : 51); 
    152149 
    153150    nColorPlanes = in.read(); 
     
    156153 
    157154    offset = in.getFilePointer() + 58; 
     155 
     156    addGlobalMeta("Palette type", paletteType); 
    158157 
    159158    core[0].sizeZ = 1; 
  • trunk/components/bio-formats/src/loci/formats/in/PGMReader.java

    r5517 r6140  
    2727import java.util.StringTokenizer; 
    2828 
     29import loci.common.ByteArrayHandle; 
    2930import loci.common.DataTools; 
    3031import loci.common.RandomAccessInputStream; 
     32import loci.common.RandomAccessOutputStream; 
    3133import loci.formats.FormatException; 
    3234import loci.formats.FormatReader; 
     
    8890    } 
    8991    else { 
    90       int pt = 0; 
    91       while (true) { 
     92      ByteArrayHandle handle = new ByteArrayHandle(); 
     93      RandomAccessOutputStream out = new RandomAccessOutputStream(handle); 
     94      out.order(isLittleEndian()); 
     95 
     96      while (in.getFilePointer() < in.length()) { 
    9297        String line = in.readLine().trim(); 
    9398        line = line.replaceAll("[^0-9]", " "); 
     
    96101          int q = Integer.parseInt(t.nextToken().trim()); 
    97102          if (getPixelType() == FormatTools.UINT16) { 
    98             DataTools.unpackBytes(q, buf, pt, 2, isLittleEndian()); 
    99             pt += 2; 
     103            out.writeShort(q); 
    100104          } 
    101           else { 
    102             buf[pt++] = (byte) q; 
    103           } 
     105          else out.writeByte(q); 
    104106        } 
    105107      } 
     108 
     109      out.close(); 
     110      RandomAccessInputStream s = new RandomAccessInputStream(handle); 
     111      s.seek(0); 
     112      readPlane(s, x, y, w, h, buf); 
     113      s.close(); 
    106114    } 
    107115 
     
    137145 
    138146    line = line.replaceAll("[^0-9]", " "); 
    139     core[0].sizeX = 
    140       Integer.parseInt(line.substring(0, line.indexOf(" ")).trim()); 
    141     core[0].sizeY = 
    142       Integer.parseInt(line.substring(line.indexOf(" ") + 1).trim()); 
     147    int space = line.indexOf(" "); 
     148    core[0].sizeX = Integer.parseInt(line.substring(0, space).trim()); 
     149    core[0].sizeY = Integer.parseInt(line.substring(space + 1).trim()); 
    143150 
    144151    if (!isBlackAndWhite) { 
     
    149156 
    150157    offset = in.getFilePointer(); 
     158 
     159    addGlobalMeta("Black and white", isBlackAndWhite); 
    151160 
    152161    core[0].rgb = getSizeC() == 3; 
Note: See TracChangeset for help on using the changeset viewer.