Changeset 1322


Ignore:
Timestamp:
08/22/06 11:19:22 (14 years ago)
Author:
melissa
Message:

Added logic to handle 32-bit TIFFs; updated todo list.

Location:
trunk/loci/formats
Files:
2 edited

Legend:

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

    r1320 r1322  
    2828import java.io.*; 
    2929import java.lang.reflect.Field; 
    30 import java.nio.ByteBuffer; 
    31 import java.nio.ShortBuffer; 
     30import java.nio.*; 
    3231import java.util.*; 
    3332 
     
    12041203      } 
    12051204    } 
    1206     else if (bitsPerSample[0] == 32) 
    1207     { 
    1208       // FIXME: To be implemented 
    1209       throw new FormatException("Floating point pixel data not yet supported."); 
     1205    else if (bitsPerSample[0] == 32) { 
     1206      byteData = new byte[samplesPerPixel][numSamples * 4]; 
     1207      for (int i=0; i<samplesPerPixel; i++) { 
     1208        for (int j=0; j<numSamples; j++) { 
     1209          byteData[i][j * 4] = (byte) ((samples[i][j] & 0xff000000) >> 24); 
     1210          byteData[i][j * 4 + 1] = (byte) ((samples[i][j] & 0xff0000) >> 16); 
     1211          byteData[i][j * 4 + 2] = (byte) ((samples[i][j] & 0xff00) >> 8); 
     1212          byteData[i][j * 4 + 3] = (byte) (samples[i][j] & 0xff); 
     1213        } 
     1214      } 
    12101215    } 
    12111216    else 
     
    12521257          (int) imageWidth, (int) imageLength); 
    12531258    } 
    1254     else if (bitsPerSample[0] == 32) 
    1255     { 
    1256       // FIXME: To be implemented. 
    1257       throw new FormatException("Floating point pixel data not yet supported."); 
     1259    else if (bitsPerSample[0] == 32) { 
     1260      int type = getIFDIntValue(ifd, SAMPLE_FORMAT); 
     1261      if (type == 3) { 
     1262        // float data 
     1263        float[][] floatData = new float[samplesPerPixel][samples[0].length / 4]; 
     1264        for (int i=0; i<samplesPerPixel; i++) { 
     1265          FloatBuffer sampleBuf = ByteBuffer.wrap(samples[i]).asFloatBuffer(); 
     1266          sampleBuf.get(floatData[i]); 
     1267        } 
     1268        return ImageTools.makeImage(floatData, 
     1269          (int) imageWidth, (int) imageLength); 
     1270      } 
     1271      else { 
     1272        // int data 
     1273        int[][] intData = new int[samplesPerPixel][samples[0].length / 4]; 
     1274        for (int i=0; i<samplesPerPixel; i++) { 
     1275          IntBuffer sampleBuf = ByteBuffer.wrap(samples[i]).asIntBuffer(); 
     1276          sampleBuf.get(intData[i]); 
     1277        } 
     1278         
     1279        byte[][] shortData = new byte[samplesPerPixel][intData[0].length]; 
     1280        for (int i=0; i<samplesPerPixel; i++) { 
     1281          for (int j=0; j<shortData[0].length; j++) { 
     1282            shortData[i][j] = (byte) intData[i][j]; 
     1283          } 
     1284        } 
     1285         
     1286        return ImageTools.makeImage(shortData, 
     1287          (int) imageWidth, (int) imageLength); 
     1288      } 
    12581289    } 
    12591290    return ImageTools.makeImage(samples, (int) imageWidth, (int) imageLength); 
  • trunk/loci/formats/todo.txt

    r1307 r1322  
    22* leica-lif/matthias (from Leica SP5 scope) 
    33* quicktime/haining/video2.mov (both legacy and native) 
    4  
    5 TIFF: 
    6 * fix support for floating point TIFF files (see TiffTools.java:1199-1203) 
    74 
    85QuickTime: 
Note: See TracChangeset for help on using the changeset viewer.