Changeset 2257


Ignore:
Timestamp:
02/13/07 09:31:08 (13 years ago)
Author:
melissa
Message:

Fixed channel min/max computation and retrieval for RGB TIFFs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/BaseTiffReader.java

    r2256 r2257  
    4646  /** The maximum index in the channelMinMax array */ 
    4747  private static final int MAX = 1; 
    48          
     48 
    4949  // -- Fields -- 
    5050 
     
    560560      // populate Logical Channel elements 
    561561      for (int i=0; i<getSizeC(currentId); i++) { 
    562         setLogicalChannel(i); 
    563         setChannelGlobalMinMax(i); 
     562        try { 
     563          setLogicalChannel(i); 
     564          if ((getChannelGlobalMinimum(currentId, 0) == null || 
     565            getChannelGlobalMaximum(currentId, 0) == null) && 
     566            enableChannelStatCalculation) 
     567          { 
     568            setChannelGlobalMinMax(i); 
     569          } 
     570        } 
     571        catch (FormatException e) { 
     572          if (debug) e.printStackTrace(); 
     573        } 
     574        catch (IOException e) { 
     575          if (debug) e.printStackTrace(); 
     576        } 
    564577      } 
    565578 
     
    834847    throws FormatException, IOException 
    835848  { 
    836     Double min = getChannelGlobalMinimum(currentId, channelIdx); 
    837     Double max = getChannelGlobalMaximum(currentId, channelIdx); 
    838     getMetadataStore(currentId).setChannelGlobalMinMax(channelIdx, min, 
    839                                                        max, null); 
     849    getChannelGlobalMinMax(); 
     850    getMetadataStore(currentId).setChannelGlobalMinMax(channelIdx, 
     851        channelMinMax[channelIdx][MIN], channelMinMax[channelIdx][MAX], null); 
     852  } 
     853 
     854  /** 
     855   * Retrieves the global min and max for each channel. 
     856   * @throws FormatException if there is an error parsing metadata. 
     857   * @throws IOException if there is an error reading the file. 
     858   */ 
     859  public void getChannelGlobalMinMax() throws FormatException, IOException { 
     860    if (channelMinMax == null) { 
     861      channelMinMax = new Double[getSizeC(currentId)][2]; 
     862    } 
     863    else return; 
     864 
     865    for (int c = 0; c < getSizeC(currentId); c++) { 
     866      double min = Double.MAX_VALUE; 
     867      double max = Double.MIN_VALUE; 
     868      for (int t = 0; t < getSizeT(currentId); t++) { 
     869        for (int z = 0; z < getSizeZ(currentId); z++) { 
     870          int index = getIndex(currentId, z, isRGB(currentId) ? 0 : c, t); 
     871          WritableRaster pixels = openImage(currentId, index).getRaster(); 
     872          for (int x = 0; x < getSizeX(currentId); x++) { 
     873            for (int y = 0; y < getSizeY(currentId); y++) { 
     874              double pixelValue = pixels.getSampleDouble(x, y,  
     875                isRGB(currentId) ? c : 0); 
     876              if (pixelValue < min) min = pixelValue; 
     877              if (pixelValue > max) max = pixelValue; 
     878            } 
     879          } 
     880        } 
     881      } 
     882      channelMinMax[c][MIN] = new Double(min); 
     883      channelMinMax[c][MAX] = new Double(max); 
     884    } 
    840885  } 
    841886 
Note: See TracChangeset for help on using the changeset viewer.