Changeset 5679


Ignore:
Timestamp:
11/09/09 15:10:28 (10 years ago)
Author:
melissa
Message:

Tweaked tiled image handling.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.1/components/bio-formats/src/loci/formats/in/ZeissZVIReader.java

    r5664 r5679  
    101101  private int[] channelColors; 
    102102  private int lastPlane; 
    103   private Vector<Integer> tiles = new Vector<Integer>(); 
     103  private Hashtable<Integer, Integer> tiles = new Hashtable<Integer, Integer>(); 
    104104 
    105105  // -- Constructor -- 
     
    192192  { 
    193193    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    194  
    195194    lastPlane = no; 
    196195 
     
    256255          int rowIndex = row * tileHeight; 
    257256          int colIndex = col * tileWidth; 
     257          int tileIndex = row * tileColumns + col; 
    258258 
    259259          if ((rowIndex <= y && rowIndex + tileHeight >= y) || 
     
    276276              { 
    277277                ii = row*tileColumns + (tileColumns - col - 1); 
     278                tileIndex = row * tileColumns + (tileColumns - col - 1); 
    278279              } 
    279               if (!tiles.contains(new Integer(ii))) { 
     280              Integer tileCount = tiles.get(new Integer(ii)); 
     281              boolean valid = tileCount != null && tileCount.intValue() > no; 
     282              if (!valid) { 
     283                colOffset += tileW; 
     284                if (colOffset >= w) { 
     285                  colOffset = 0; 
     286                  rowOffset += tileH; 
     287                } 
     288                firstTile -= getImageCount(); 
     289                continue; 
     290              } 
     291              int p = ii; 
     292              for (int n=0; n<p; n++) { 
     293                if (tiles.containsKey(new Integer(n))) { 
     294                  ii += tiles.get(new Integer(n)).intValue(); 
     295                } 
     296              } 
     297              if (firstTile > 0) ii += firstTile; 
     298              ii -= tileIndex; 
     299              ii += no; 
     300 
     301              if (ii >= imageFiles.length) { 
    280302                colOffset += tileW; 
    281303                if (colOffset >= w) { 
     
    285307                continue; 
    286308              } 
    287               else ii = tiles.indexOf(new Integer(ii)); 
    288               ii *= count; 
    289               ii += firstTile; 
    290  
    291309              RandomAccessInputStream s = poi.getDocumentStream(imageFiles[ii]); 
    292310              s.seek(offsets[ii]); 
     
    424442        s.order(true); 
    425443        int imageNum = getImageNumber(name, -1); 
    426         tagsToParse.add(s); 
    427444        if (imageNum == -1) { 
    428445          parseTags(imageNum, s, new DummyMetadata()); 
    429446        } 
     447        else tagsToParse.add(s); 
    430448      } 
    431449      else if (dirName.equals("Shapes") && name.indexOf("Item") != -1) { 
     
    744762        addGlobalMeta(key, value); 
    745763 
    746         if (key.startsWith("ImageTile")) { 
    747           if (!tiles.contains(new Integer(value))) { 
    748             tiles.add(new Integer(value)); 
     764        if (key.startsWith("ImageTile") && !(store instanceof DummyMetadata)) { 
     765          if (!tiles.containsKey(new Integer(value))) { 
     766            tiles.put(new Integer(value), new Integer(1)); 
     767          } 
     768          else { 
     769            int v = tiles.get(new Integer(value)).intValue() + 1; 
     770            tiles.put(new Integer(value), new Integer(v)); 
    749771          } 
    750772        } 
  • trunk/components/bio-formats/src/loci/formats/in/ZeissZVIReader.java

    r5665 r5679  
    101101  private int[] channelColors; 
    102102  private int lastPlane; 
    103   private Vector<Integer> tiles = new Vector<Integer>(); 
     103  private Hashtable<Integer, Integer> tiles = new Hashtable<Integer, Integer>(); 
    104104 
    105105  // -- Constructor -- 
     
    192192  { 
    193193    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    194  
    195194    lastPlane = no; 
    196195 
     
    256255          int rowIndex = row * tileHeight; 
    257256          int colIndex = col * tileWidth; 
     257          int tileIndex = row * tileColumns + col; 
    258258 
    259259          if ((rowIndex <= y && rowIndex + tileHeight >= y) || 
     
    276276              { 
    277277                ii = row*tileColumns + (tileColumns - col - 1); 
     278                tileIndex = row * tileColumns + (tileColumns - col - 1); 
    278279              } 
    279               if (!tiles.contains(new Integer(ii))) { 
     280              Integer tileCount = tiles.get(new Integer(ii)); 
     281              boolean valid = tileCount != null && tileCount.intValue() > no; 
     282              if (!valid) { 
    280283                colOffset += tileW; 
    281284                if (colOffset >= w) { 
     
    283286                  rowOffset += tileH; 
    284287                } 
     288                firstTile -= getImageCount(); 
    285289                continue; 
    286290              } 
    287               else ii = tiles.indexOf(new Integer(ii)); 
    288               ii *= count; 
    289               ii += firstTile; 
     291              int p = ii; 
     292              for (int n=0; n<p; n++) { 
     293                if (tiles.containsKey(new Integer(n))) { 
     294                  ii += tiles.get(new Integer(n)).intValue(); 
     295                } 
     296              } 
     297              if (firstTile > 0) ii += firstTile; 
     298              ii -= tileIndex; 
     299              ii += no; 
    290300 
    291301              if (ii >= imageFiles.length) { 
     
    432442        s.order(true); 
    433443        int imageNum = getImageNumber(name, -1); 
    434         tagsToParse.add(s); 
    435444        if (imageNum == -1) { 
    436445          parseTags(imageNum, s, new DummyMetadata()); 
    437446        } 
     447        else tagsToParse.add(s); 
    438448      } 
    439449      else if (dirName.equals("Shapes") && name.indexOf("Item") != -1) { 
     
    752762        addGlobalMeta(key, value); 
    753763 
    754         if (key.startsWith("ImageTile")) { 
    755           if (!tiles.contains(new Integer(value))) { 
    756             tiles.add(new Integer(value)); 
     764        if (key.startsWith("ImageTile") && !(store instanceof DummyMetadata)) { 
     765          if (!tiles.containsKey(new Integer(value))) { 
     766            tiles.put(new Integer(value), new Integer(1)); 
     767          } 
     768          else { 
     769            int v = tiles.get(new Integer(value)).intValue() + 1; 
     770            tiles.put(new Integer(value), new Integer(v)); 
    757771          } 
    758772        } 
Note: See TracChangeset for help on using the changeset viewer.