Changeset 5104


Ignore:
Timestamp:
05/12/09 16:51:05 (11 years ago)
Author:
melissa
Message:

Fixed memory leaks in OpenlabReader, PictReader and FV1000Reader.

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

Legend:

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

    r5094 r5104  
    918918        core[i].thumbSizeY = thumbReader.getSizeY(); 
    919919      } 
     920      Location.mapFile("thumbnail.bmp", null); 
    920921    } 
    921922    catch (IOException e) { 
  • trunk/components/bio-formats/src/loci/formats/in/OpenlabReader.java

    r5093 r5104  
    3030import loci.common.Location; 
    3131import loci.common.RandomAccessInputStream; 
     32import loci.formats.ChannelSeparator; 
    3233import loci.formats.CoreMetadata; 
    3334import loci.formats.FormatException; 
    3435import loci.formats.FormatReader; 
    3536import loci.formats.FormatTools; 
     37import loci.formats.IFormatReader; 
    3638import loci.formats.ImageTools; 
    3739import loci.formats.MetadataTools; 
     
    149151      planes[planeOffsets[series][no + 1]].planeOffset; 
    150152    in.seek(first); 
    151     byte[] b = new byte[(int) (last - first)]; 
    152153 
    153154    int bpp = FormatTools.getBytesPerPixel(getPixelType()); 
     
    160161        in.skipBytes(16); 
    161162        int bytes = bpp * getRGBChannelCount(); 
     163        byte[] b = new byte[(int) (last - first)]; 
    162164        in.read(b); 
    163165 
     
    185187          } 
    186188        } 
     189        b = null; 
    187190      } 
    188191      if (planes[index].volumeType == MAC_256_GREYS || 
     
    196199    else { 
    197200      // PICT plane 
    198       b = new byte[b.length + 512]; 
     201      byte[] b = new byte[(int) (last - first) + 512]; 
    199202      in.read(b, 512, b.length - 512); 
    200203      Exception exc = null; 
    201       byte[] tmpBuf = 
    202         new byte[buf.length * (getRGBChannelCount() == 3 ? 1 : 3)]; 
     204      IFormatReader r = 
     205        getRGBChannelCount() == 1 ? new ChannelSeparator(pict) : pict; 
    203206      try { 
    204207        Location.mapFile("OPENLAB_PICT", new ByteArrayHandle(b)); 
    205         pict.setId("OPENLAB_PICT"); 
     208        r.setId("OPENLAB_PICT"); 
    206209 
    207210        if (getPixelType() != pict.getPixelType()) { 
     
    215218        } 
    216219 
    217         pict.openBytes(0, tmpBuf, x, y, w, h); 
    218  
    219         if (getRGBChannelCount() == 1) { 
    220           byte[] splitBuf = ImageTools.splitChannels(tmpBuf, 0, 3, 
    221             FormatTools.getBytesPerPixel(getPixelType()), false, 
    222             pict.isInterleaved()); 
    223           System.arraycopy(splitBuf, 0, buf, 0, splitBuf.length); 
    224         } 
    225         else System.arraycopy(tmpBuf, 0, buf, 0, tmpBuf.length); 
     220        r.openBytes(0, buf, x, y, w, h); 
     221        r.close(); 
     222        // remove file from map 
     223        Location.mapFile("OPENLAB_PICT", null); 
    226224      } 
    227225      catch (FormatException e) { exc = e; } 
    228226      catch (IOException e) { exc = e; } 
    229       pict.close(); 
     227      b = null; 
    230228 
    231229      if (exc != null) { 
     
    277275            x * bpp * getRGBChannelCount(), buf, row*rowLen, rowLen); 
    278276        } 
     277        plane = null; 
    279278      } 
    280279    } 
     
    301300    luts = null; 
    302301    lastPlane = 0; 
     302    version = 0; 
     303    numSeries = 0; 
     304    xcal = ycal = 0f; 
     305    nextTag = 0; 
     306    tag = subTag = 0; 
     307    fmt = ""; 
     308    planeOffsets = null; 
     309    gain = detectorOffset = null; 
     310    xPos = yPos = zPos = null; 
    303311  } 
    304312 
     
    370378        long pointer = in.getFilePointer(); 
    371379        planes[imagesFound].planeName = in.readCString().trim(); 
    372         in.skipBytes((int) (128 - in.getFilePointer() + pointer)); 
    373  
    374         in.skipBytes(128); 
     380        in.skipBytes((int) (256 - in.getFilePointer() + pointer)); 
    375381 
    376382        planes[imagesFound].planeOffset = in.getFilePointer(); 
     
    497503    int nSeries = representativePlanes.size(); 
    498504    planeOffsets = new int[nSeries][]; 
    499     Vector tmpOffsets = new Vector(); 
     505    Vector<Integer> tmpOffsets = new Vector<Integer>(); 
    500506    Vector names = new Vector(); 
    501507    for (int i=0; i<nSeries; i++) { 
    502508      for (int q=0; q<planes.length; q++) { 
    503509        if (planes[q] != null && planes[q].series == i) { 
    504           tmpOffsets.add(new Integer(q)); 
     510          tmpOffsets.add(q); 
    505511          names.add(planes[q].planeName); 
    506512        } 
     
    508514      planeOffsets[i] = new int[tmpOffsets.size()]; 
    509515      for (int q=0; q<planeOffsets[i].length; q++) { 
    510         planeOffsets[i][q] = ((Integer) tmpOffsets.get(q)).intValue(); 
    511         addMeta("Series " + i + " Plane " + q + " Name", 
    512          names.get(q)); 
     516        planeOffsets[i][q] = tmpOffsets.get(q); 
     517        addMeta("Series " + i + " Plane " + q + " Name", names.get(q)); 
    513518      } 
    514519      tmpOffsets.clear(); 
  • trunk/components/bio-formats/src/loci/formats/in/PictReader.java

    r5093 r5104  
    110110  } 
    111111 
    112  
    113   /** 
    114    * @see loci.formats.IFormatReader#get8BitLookupTable() 
    115    */ 
     112  // -- IFormatReader API methods -- 
     113 
     114  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
    116115  public byte[][] get8BitLookupTable() throws FormatException, IOException { 
    117     FormatTools.assertId(currentId, true, 0); 
     116    FormatTools.assertId(currentId, true, 1); 
    118117    return lookup; 
    119118  } 
     
    132131        AWTImageTools.makeBuffered(qtTools.pictToImage(pix)), 
    133132        isLittleEndian()); 
     133      pix = null; 
    134134      for (int i=0; i<b.length; i++) { 
    135135        System.arraycopy(b[i], 0, buf, i*b[i].length, b[i].length); 
    136136      } 
     137      b = null; 
    137138      return buf; 
    138139    } 
     
    164165      int nc = strips.size() / getSizeY(); 
    165166 
     167      byte[] c0 = null; 
     168      byte[] c1 = null; 
     169      byte[] c2 = null; 
     170 
    166171      for (int i=0; i<getSizeY(); i++) { 
    167         byte[] c0 = (byte[]) strips.get(i * nc + nc - 3); 
    168         byte[] c1 = (byte[]) strips.get(i * nc + nc - 2); 
    169         byte[] c2 = (byte[]) strips.get(i * nc + nc - 1); 
     172        c0 = (byte[]) strips.get(i * nc + nc - 3); 
     173        c1 = (byte[]) strips.get(i * nc + nc - 2); 
     174        c2 = (byte[]) strips.get(i * nc + nc - 1); 
    170175        int baseOffset = i * getSizeX(); 
    171176        System.arraycopy(c0, 0, buf, baseOffset, getSizeX()); 
     
    176181    else { 
    177182      // RGB value is packed into a single short: xRRR RRGG GGGB BBBB 
     183      int[] row = null; 
    178184      for (int i=0; i<getSizeY(); i++) { 
    179         int[] row = (int[]) strips.get(i); 
     185        row = (int[]) strips.get(i); 
    180186 
    181187        for (int j=0; j<row.length; j++) { 
     
    190196  } 
    191197 
    192   // -- IFormatReader API methods -- 
    193  
    194198  /* @see loci.formats.IFormatReader#isThisType(RandomAccessInputStream) */ 
    195199  public boolean isThisType(RandomAccessInputStream stream) throws IOException { 
    196200    return FormatTools.validStream(stream, blockCheckLen, false); 
     201  } 
     202 
     203  // -- IFormatHandler API methods -- 
     204 
     205  /* @see loci.formats.IFormatHandler#close() */ 
     206  public void close() throws IOException { 
     207    super.close(); 
     208    rowBytes = 0; 
     209    strips = null; 
     210    versionOne = false; 
     211    lookup = null; 
     212    legacy = false; 
    197213  } 
    198214 
     
    441457            } 
    442458            strips.add(uBufI); 
     459            buf = null; 
    443460            core[0].sizeC = 3; 
    444461            break; 
     
    449466            expandPixels(pixelSize, buf, outBuf, outBuf.length); 
    450467            strips.add(outBuf); 
     468            buf = null; 
    451469        } 
    452470      } 
Note: See TracChangeset for help on using the changeset viewer.