Changeset 4781


Ignore:
Timestamp:
02/05/09 14:42:24 (11 years ago)
Author:
curtis
Message:

Offset adjustment and general cleanup for ARF reader. Works on sample image.

File:
1 edited

Legend:

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

    r4778 r4781  
    7777    int sizeX = getSizeX(); 
    7878    int sizeY = getSizeY(); 
    79     in.seek(12 + 512 + bytesPerPixel * (x + sizeX * (y + sizeY * no))); 
    80     for (int q=0; q < h; q++) { 
    81       in.read(buf, q * y * bytesPerPixel, w * bytesPerPixel); 
    82       if (w < sizeX) 
    83         in.skipBytes((sizeX - w) * bytesPerPixel); 
    84     } 
     79    in.seek(14 + 510 + no * bytesPerPixel * sizeX * sizeY); 
     80    readPlane(in, x, y, w, h, buf); 
    8581 
    8682    return buf; 
     
    9591    in = new RandomAccessStream(id); 
    9692 
     93    // parse file header 
     94 
    9795    status("Reading file header"); 
    9896 
    99     in.seek(0); 
    100     short endian1 = in.readByte(); 
    101     short endian2 = in.readByte(); 
    102     if (endian1 == 1 && endian2 == 0) 
    103       in.order(true); 
    104     else if (endian1 == 0 && endian2 == 1) 
    105       in.order(false); 
    106     else 
    107       throw new FormatException("Undefined endianness"); 
     97    byte endian1 = in.readByte(); 
     98    byte endian2 = in.readByte(); 
     99    boolean little; 
     100    if (endian1 == 1 && endian2 == 0) little = true; 
     101    else if (endian1 == 0 && endian2 == 1) little = false; 
     102    else throw new FormatException("Undefined endianness"); 
     103    in.order(little); 
    108104 
    109     in.skipBytes(2); 
    110     short version = in.readShort(); 
    111     core[0].sizeX = in.readShort(); 
    112     core[0].sizeY = in.readShort(); 
     105    in.skipBytes(2); // 'AR' signature 
     106    int version = in.readUnsignedShort(); 
     107    int height = in.readUnsignedShort(); 
     108    int width = in.readUnsignedShort(); 
     109    int bitsPerPixel = in.readUnsignedShort(); 
     110    int numImages = version == 2 ? in.readUnsignedShort() : 1; 
     111    // NB: The next 510 bytes are unused 'application dependent' data, 
     112    // followed by raw image data with no padding. 
    113113 
    114     int bitsPerPixel = in.readShort(); 
    115     if (bitsPerPixel > 32) 
    116       throw new FormatException("Too many bits per pixel: " + bitsPerPixel); 
    117     if (bitsPerPixel > 16) 
    118       core[0].pixelType = FormatTools.UINT32; 
    119     else if (bitsPerPixel > 7) 
    120       core[0].pixelType = FormatTools.UINT16; 
    121     else 
    122       core[0].pixelType = FormatTools.UINT8; 
     114    // populate core metadata 
    123115 
     116    core[0].sizeX = width; 
     117    core[0].sizeY = height; 
    124118    core[0].sizeZ = 1; 
    125119    core[0].sizeC = 1; 
    126     core[0].sizeT = version == 2 ? in.readShort() : 1; 
    127     core[0].imageCount = core[0].sizeT; 
    128     core[0].littleEndian = endian1 == 1; 
     120    core[0].sizeT = numImages; 
     121 
     122    if (bitsPerPixel > 32) { 
     123      throw new FormatException("Too many bits per pixel: " + bitsPerPixel); 
     124    } 
     125    else if (bitsPerPixel > 16) core[0].pixelType = FormatTools.UINT32; 
     126    else if (bitsPerPixel > 8) core[0].pixelType = FormatTools.UINT16; 
     127    else core[0].pixelType = FormatTools.UINT8; 
     128 
     129    core[0].imageCount = numImages; 
     130    core[0].dimensionOrder = "XYCZT"; 
     131    core[0].orderCertain = true; 
     132    core[0].littleEndian = little; 
    129133    core[0].rgb = false; 
     134    core[0].interleaved = false; 
    130135    core[0].indexed = false; 
    131     core[0].interleaved = false; 
    132     core[0].dimensionOrder = "XYCZT"; 
     136    core[0].metadataComplete = true; 
     137 
     138    // populate original metadata 
     139 
     140    addMeta("Endianness", little ? "little" : "big"); 
     141    addMeta("Version", version); 
     142    addMeta("Width", width); 
     143    addMeta("Height", height); 
     144    addMeta("Bits per pixel", bitsPerPixel); 
     145    addMeta("Image count", numImages); 
     146 
     147    // populate OME metadata 
    133148 
    134149    MetadataStore store = 
Note: See TracChangeset for help on using the changeset viewer.