Changeset 5631


Ignore:
Timestamp:
10/26/09 20:26:52 (10 years ago)
Author:
melissa
Message:

Some improvements to tile stitching logic. Images with missing tiles are now properly handled.

File:
1 edited

Legend:

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

    r5624 r5631  
    101101  private int[] channelColors; 
    102102  private int lastPlane; 
     103  private Vector<Integer> tiles = new Vector<Integer>(); 
    103104 
    104105  // -- Constructor -- 
     
    276277                ii = row*tileColumns + (tileColumns - col - 1); 
    277278              } 
     279              if (!tiles.contains(new Integer(ii))) { 
     280                colOffset += tileW; 
     281                if (colOffset >= w) { 
     282                  colOffset = 0; 
     283                  rowOffset += tileH; 
     284                } 
     285                continue; 
     286              } 
     287              else ii = tiles.indexOf(new Integer(ii)); 
    278288              ii *= count; 
    279289              ii += firstTile; 
     
    346356      channelColors = null; 
    347357      lastPlane = 0; 
     358      tiles.clear(); 
    348359    } 
    349360  } 
     
    501512    status("Populating metadata"); 
    502513 
     514    for (RandomAccessInputStream s : tagsToParse) { 
     515      s.order(true); 
     516      parseTags(-1, s, store); 
     517      s.close(); 
     518    } 
     519 
    503520    core[0].sizeZ = zIndices.size(); 
    504521    core[0].sizeT = tIndices.size(); 
     
    522539    if (getSizeY() * tileRows != realHeight) tileRows++; 
    523540    if (getSizeX() * tileColumns != realWidth) tileColumns++; 
    524  
    525     while (totalTiles < tileRows * tileColumns && tileRows > 1) { 
    526       tileRows--; 
    527     } 
    528     if (tileRows > 0) tileColumns = totalTiles / tileRows; 
    529541 
    530542    if (totalTiles <= 1) { 
     
    614626    } 
    615627 
    616     for (RandomAccessInputStream s : tagsToParse) { 
    617       s.order(true); 
    618       parseTags(-1, s, store); 
    619       s.close(); 
    620     } 
    621628    core[0].indexed = !isRGB() && channelColors != null; 
    622629 
     
    723730        else if (key.equals("ImageWidth")) { 
    724731          int v = Integer.parseInt(value); 
    725           if (getSizeX() == 0) { 
     732          if (getSizeX() == 0 || v < getSizeX()) { 
    726733            core[0].sizeX = v; 
    727734          } 
     
    730737        else if (key.equals("ImageHeight")) { 
    731738          int v = Integer.parseInt(value); 
    732           if (getSizeY() == 0) core[0].sizeY = v; 
     739          if (getSizeY() == 0 || v < getSizeY()) core[0].sizeY = v; 
    733740          if (realHeight == 0 || v > realHeight) realHeight = v; 
    734741        } 
     
    737744        addGlobalMeta(key, value); 
    738745 
     746        if (key.startsWith("ImageTile")) { 
     747          if (!tiles.contains(new Integer(value))) { 
     748            tiles.add(new Integer(value)); 
     749          } 
     750        } 
     751 
    739752        if (key.equals("ImageTile Index") || key.equals("ImageTile Index 0")) { 
    740           firstImageTile = value; 
     753          if (firstImageTile == null) { 
     754            firstImageTile = value; 
     755          } 
    741756        } 
    742757        else if (key.equals("ImageTile Index 1")) secondImageTile = value; 
Note: See TracChangeset for help on using the changeset viewer.