Changeset 2011


Ignore:
Timestamp:
01/04/07 11:37:04 (13 years ago)
Author:
melissa
Message:

Tweaked support for planar TIFF files (fixes issue with 2-channel LSM files).

Location:
trunk/loci/formats
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/TiffTools.java

    r2010 r2011  
    868868    } 
    869869 
     870    boolean lastBitsZero = bitsPerSample[bitsPerSample.length - 1] == 0; 
     871 
    870872    if (fakeRPS && !isTiled) { 
    871873      // create a false rowsPerStripArray if one is not present 
     
    874876      // since stripByteCounts and bitsPerSample are arrays, we have to 
    875877      // iterate through each item 
    876  
    877       if (bitsPerSample.length == 2 || 
    878         bitsPerSample[bitsPerSample.length - 1] == 0) 
    879       { 
    880         int t = bitsPerSample[0]; 
    881         bitsPerSample = new int[1]; 
    882         bitsPerSample[0] = t; 
    883       } 
    884878 
    885879      rowsPerStripArray = new long[bitsPerSample.length]; 
     
    10081002 
    10091003      samplesPerPixel = stripOffsets.length; 
     1004    } 
     1005 
     1006    if (lastBitsZero) { 
     1007      bitsPerSample[bitsPerSample.length - 1] = 0; 
     1008      samplesPerPixel--; 
    10101009    } 
    10111010 
     
    10931092    } 
    10941093 
    1095     for (int i=0; i<bitsPerSample.length; i++) { 
     1094    for (int i=0; i<samplesPerPixel; i++) { 
    10961095      if (bitsPerSample[i] < 1) { 
    10971096        throw new FormatException("Illegal BitsPerSample (" + 
     
    12451244 
    12461245      for (int strip=0, row=0; strip<numStrips; strip++, row+=rowsPerStrip) { 
    1247         if (DEBUG) debug("reading image strip #" + strip); 
    1248         long actualRows = (row + rowsPerStrip > imageLength) ? 
    1249           imageLength - row : rowsPerStrip; 
    1250         in.seek((int) stripOffsets[strip]); 
    1251  
    1252         if (stripByteCounts[strip] > Integer.MAX_VALUE) { 
    1253           throw new FormatException("Sorry, StripByteCounts > " + 
    1254             Integer.MAX_VALUE + " is not supported"); 
    1255         } 
    1256         byte[] bytes = new byte[(int) stripByteCounts[strip]]; 
    1257         in.read(bytes); 
    1258         if (compression != PACK_BITS) { 
    1259           bytes = uncompress(bytes, compression); 
    1260           undifference(bytes, bitsPerSample, 
    1261             imageWidth, planarConfig, predictor); 
     1246        try { 
     1247          if (DEBUG) debug("reading image strip #" + strip); 
     1248          long actualRows = (row + rowsPerStrip > imageLength) ? 
     1249            imageLength - row : rowsPerStrip; 
     1250          in.seek((int) stripOffsets[strip]); 
     1251 
     1252          if (stripByteCounts[strip] > Integer.MAX_VALUE) { 
     1253            throw new FormatException("Sorry, StripByteCounts > " + 
     1254              Integer.MAX_VALUE + " is not supported"); 
     1255          } 
     1256          byte[] bytes = new byte[(int) stripByteCounts[strip]]; 
     1257          in.read(bytes); 
     1258          if (compression != PACK_BITS) { 
     1259            bytes = uncompress(bytes, compression); 
     1260            undifference(bytes, bitsPerSample, 
     1261              imageWidth, planarConfig, predictor); 
     1262            int offset = (int) (imageWidth * row); 
     1263            if (planarConfig == 2) { 
     1264              offset = overallOffset / samplesPerPixel; 
     1265            } 
     1266            unpackBytes(samples, offset, bytes, bitsPerSample, 
     1267              photoInterp, colorMap, littleEndian, maxValue, planarConfig,  
     1268              strip, (int) numStrips); 
     1269            overallOffset += bytes.length / bitsPerSample.length; 
     1270          } 
     1271          else { 
     1272            // concatenate contents of bytes to altBytes 
     1273            byte[] tempPackBits = new byte[altBytes.length]; 
     1274            System.arraycopy(altBytes, 0, tempPackBits, 0, altBytes.length); 
     1275            altBytes = new byte[altBytes.length + bytes.length]; 
     1276            System.arraycopy(tempPackBits, 0, altBytes, 0, tempPackBits.length); 
     1277            System.arraycopy(bytes, 0, altBytes, 
     1278              tempPackBits.length, bytes.length); 
     1279          } 
     1280        } 
     1281        catch (Exception e) { 
     1282          if (strip == 0) throw new FormatException(e); 
     1283          byte[] bytes = new byte[samples[0].length]; 
     1284          undifference(bytes, bitsPerSample, imageWidth, planarConfig,  
     1285            predictor); 
    12621286          int offset = (int) (imageWidth * row); 
    1263           if (planarConfig == 2) { 
    1264             offset = overallOffset / samplesPerPixel; 
    1265           } 
    1266           unpackBytes(samples, offset, bytes, bitsPerSample, 
    1267             photoInterp, colorMap, littleEndian, maxValue, planarConfig, strip, 
    1268             (int) numStrips); 
     1287          if (planarConfig == 2) offset = overallOffset / samplesPerPixel; 
     1288          unpackBytes(samples, offset, bytes, bitsPerSample, photoInterp,  
     1289            colorMap, littleEndian, maxValue, planarConfig,  
     1290            strip, (int) numStrips); 
    12691291          overallOffset += bytes.length / bitsPerSample.length; 
    1270         } 
    1271         else { 
    1272           // concatenate contents of bytes to altBytes 
    1273           byte[] tempPackBits = new byte[altBytes.length]; 
    1274           System.arraycopy(altBytes, 0, tempPackBits, 0, altBytes.length); 
    1275           altBytes = new byte[altBytes.length + bytes.length]; 
    1276           System.arraycopy(tempPackBits, 0, altBytes, 0, tempPackBits.length); 
    1277           System.arraycopy(bytes, 0, altBytes, 
    1278             tempPackBits.length, bytes.length); 
    12791292        } 
    12801293      } 
     
    14151428      } 
    14161429    } 
     1430    if (samples.length == 2) { 
     1431      byte[][] s = new byte[3][samples[0].length]; 
     1432      System.arraycopy(samples[0], 0, s[0], 0, s[0].length); 
     1433      System.arraycopy(samples[1], 0, s[1], 0, s[1].length); 
     1434      samples = s; 
     1435    } 
    14171436    return ImageTools.makeImage(samples, (int) imageWidth, (int) imageLength, 
    14181437      validBits); 
     
    14311450  { 
    14321451    int numChannels = bitsPerSample.length;  // this should always be 3 
     1452    if (bitsPerSample[bitsPerSample.length - 1] == 0) numChannels--; 
    14331453 
    14341454    // determine which channel the strip belongs to 
    14351455 
    1436     int channelNum = strip % numChannels; 
    1437  
    1438     if (channelNum > 0) { 
    1439       startIndex = (strip % numChannels) * (strip / numChannels) * 
    1440         bytes.length / numChannels; 
    1441     } 
     1456    int channelNum = strip / (numStrips / numChannels); 
     1457 
     1458    startIndex = (strip % (numStrips / numChannels)) * bytes.length; 
    14421459 
    14431460    int index = 0; 
     
    14531470        // divisible by 8 
    14541471 
    1455         // -- MELISSA TODO -- improve this as time permits 
    14561472        if (index == bytes.length) { 
    14571473          //throw new FormatException("bad index : i = " + i + ", j = " + j); 
     
    17861802    if (predictor == 2) { 
    17871803      if (DEBUG) debug("reversing horizontal differencing"); 
     1804      int len = bitsPerSample.length; 
     1805      if (bitsPerSample[len - 1] == 0) len = 1; 
    17881806      for (int b=0; b<input.length; b++) { 
    1789         if (b / bitsPerSample.length % width == 0) continue; 
    1790         input[b] += input[b - bitsPerSample.length]; 
     1807        if (b / len % width == 0) continue; 
     1808        input[b] += input[b - len]; 
    17911809      } 
    17921810    } 
  • trunk/loci/formats/in/ZeissLSMReader.java

    r2010 r2011  
    438438 
    439439      if (channels == 0) channels++; 
    440       if (channels == 2) channels--; 
     440      //if (channels == 2) channels--; 
    441441 
    442442      while (numImages > zSize * channels * tSize) { 
Note: See TracChangeset for help on using the changeset viewer.